- 博客(107)
- 资源 (1)
- 收藏
- 关注
原创 菜逼程序员的自述
渣渣学校毕业的中年程序员的自述,毕业五年了,步入奔三的年龄,大专毕业,从未去过大厂,一直混迹在各个小公司,目前薪资中等偏下。来说说为什么会写下这个自述吧,闲言继续。
2021-12-12 16:24:24
4671
原创 Semaphore信号量源码详解
Semaphore信号量底层依赖于AQS实现的信号量同步工具,可以用来做限流操作;我们可以通过Semaphore来定义信号量的资源池,通过acquire方法来获取资源,使用完成资源后,通过调用release方法释放资源池资源 使用实例 public class SemaphoreTest { public static void main(String[] args) { Semaphore semaphore = new Semaphore(2); ..
2021-01-03 18:38:45
438
原创 redis主从复制以及哨兵模式搭建详解
redis在我们工作中是非常重要的,由于网络的不可靠性,随时会有故障发生,所以使用单机的redis存在机器宕机的危险,此时我们可以给redis做一个主从复制,用一个从服务器作为备份机器。 本次搭建是在centOS7上面进行搭建,我们首先上传一个redis5.0+的安装包到服务器上,解压之后,由于本次暂时是模拟搭建,所以只在一台服务器上进行搭建,首先将redis5.0bin目录下的redis.conf文件复制一份为redis6380.conf cp redis.conf redis6380.conf
2020-11-20 12:11:52
274
原创 第二十五章 设计模式
第二十五章 设计模式 概念 最初,你可以将模式视为解决特定类问题的一种特别巧妙且有深刻见解的方法。这就像前辈已经从所有角度去解决问题,并提出了最通用,最灵活的解决方案。问题可能是你之前看到并解决过的问题,但你的解决方案可能没有你在模式中体现的那种完整性。 虽然它们被称为“设计模式”,但它们实际上并不与设计领域相关联。模式似乎与传统的分析、设计和实现的思维方式不同。相反,模式在程序中体现了一个...
2020-04-06 17:26:58
366
原创 第二十四章 并发编程
第二十四章 并发编程 爱丽丝:“但是我不想进入疯狂的人群中” 猫咪:“oh,你无能为力,我们都疯了,我疯了,你也疯了” 爱丽丝:“你怎么知道我疯了”。 猫咪:“你一定疯了,否则你不会来到这里”——爱丽丝梦游仙境 第6章。 到目前为止,我们一直在编程,就像文学中的意识流叙事设备一样:首先发生一件事,然后是下一件事。我们完全控制所有步骤及其发生的顺序。如果我们将值设置为5,那么稍后会回来...
2020-04-06 17:26:45
2323
原创 第二十三章 注解
第二十三章 注解 注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方式,使我们可以在稍后的某个时刻更容易的使用这些数据。 注解在一定程度上是把元数据和源代码文件结合在一起的趋势所激发的,而不是保存在外部文档。这同样是对像 C# 语言对于 Java 语言特性压力的一种回应。 注解是 Java 5 所引入的众多语言变化之一。它们提供了 Java 无法表达的但是你需要完整表述程序所需...
2020-04-06 17:26:35
1347
原创 第二十二章 枚举
第二十二章 枚举 关键字 enum 可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为常规的程序组件使用。这是一种非常有用的功能 在初始化和清理这章结束的时候,我们已经简单地介绍了枚举的概念。现在,你对 Java 已经有了更深刻的理解,因此可以更深入地学习 Java 中的枚举了。你将在本章中看到,使用 enum 可以做很多有趣的事情,同时,我们也会深入其他的 Java...
2020-04-06 17:26:23
406
原创 第二十一章 数组
第二十一章 数组 在初始化和清理一章的最后,你已经学过如何定义和初始化一个数组。 简单来看,数组需要你去创建和初始化,你可以通过下标对数组元素进行访问,数组的大小不会改变。大多数时候你只需要知道这些,但有时候你必须在数组上进行更复杂的操作,你也可能需要在数组和更加灵活的集合(Collection)之间做出评估。因此本章我们将对数组进行更加深入的分析。 注意:随着 Java Co...
2020-04-06 17:26:13
847
原创 第二十章 泛型
第二十章 泛型 普通的类和方法只能使用特定的类型:基本数据类型或类类型。如果编写的代码需要应用于多种类型,这种严苛的限制对代码的束缚就会很大。 多态是一种面向对象思想的泛化机制。你可以将方法的参数类型设为基类,这样的方法就可以接受任何派生类作为参数,包括暂时还不存在的类。这样的方法更通用,应用范围更广。在类内部也是如此,在任何使用特定类型的地方,基类意味着更大的灵活性。除了final类...
2020-04-06 17:25:59
956
原创 第十九章 类型信息
第十九章 类型信息 RTTI(RunTime Type Information,运行时类型信息)能够在程序运行时发现和使用类型信息 RTTI 把我们从只能在编译期进行面向类型操作的禁锢中解脱了出来,并且让我们可以使用某些非常强大的程序。对 RTTI 的需要,揭示了面向对象设计中许多有趣(并且复杂)的特性,同时也带来了关于如何组织程序的基本问题。 本章将讨论 Java 是如何在运行时识别对...
2020-04-06 17:25:45
515
原创 MySQL之count(*)查询原理
我们在实际开发的过程中肯定常常会遇到需要统计某个表总数的场景,我们自然而然的会想到使用 select count(*) from talbe count(*)实现方式 在MySQL中不同的存储引擎对于count(*)有不同的实现方式。 MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高 InnoDB引擎在执行count(*)时,需要...
2020-04-06 14:14:05
2698
原创 第十八章 字符串
第十八章 字符串 字符串操作毫无疑问是计算机程序设计中最常见的行为之一。 在 Java 大展拳脚的 Web 系统中更是如此。在本章中,我们将深入学习在 Java 语言中应用最广泛的String类,并研究与之相关的类及工具。 字符串的不可变 String对象是不可变的。查看 JDK 文档你就会发现,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全...
2020-04-03 10:27:50
481
原创 第十七章 文件
第十七章 文件 在丑陋的 Java I/O 编程方式诞生多年以后,Java终于简化了文件读写的基本操作。 这种"困难方式"的全部细节都在Appendix: I/O Streams。如果你读过这个部分,就会认同 Java 设计者毫不在意他们的使用者的体验这一观念。打开并读取文件对于大多数编程语言来是非常常用的,由于 I/O 糟糕的设计以至于 很少有人能够在不依赖其他参考代码的情况下完成打开...
2020-04-03 10:27:04
279
原创 第十六章 代码校验
第十六章 代码校验 你永远不能保证你的代码是正确的,你只能证明它是错的。 让我们先暂停编程语言特性的学习,看看一些代码基础知识。特别是能让你的代码更加健壮的知识。 测试 如果没有测试过,它就是不能工作的。 Java是一个静态类型的语言,程序员经常对一种编程语言明显的安全性感到过于舒适,“能通过编译器,那就是没问题的”。但静态类型检查是一种非常局限性的测试,只是说明编译器接受你代码中的语法...
2020-04-03 10:26:27
1229
原创 第十五章 异常
第十五章 异常 Java 的基本理念是“结构不佳的代码不能运行”。 改进的错误恢复机制是提高代码健壮性的最强有力的方式。错误恢复在我们所编写的每一个程序中都是基本的要素,但是在 Java 中它显得格外重要,因为 Java 的主要目标之一就是创建供他人使用的程序构件。 发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行期间解...
2020-04-03 10:24:23
1330
原创 第十四章 流式编程
第十四章 流式编程 集合优化了对象的存储,而流和对象的处理有关。 流是一系列与特定存储机制无关的元素——实际上,流并没有“存储”之说。 利用流,我们无需迭代集合中的元素,就可以提取和操作它们。这些管道通常被组合在一起,在流上形成一条操作管道。 在大多数情况下,将对象存储在集合中是为了处理他们,因此你将会发现你将把编程的主要焦点从集合转移到了流上。流的一个核心好处是,它使得程序更加短小并...
2020-04-03 10:23:25
626
原创 第十三章 函数式编程
第十三章 函数式编程 函数式编程语言操纵代码片段就像操作数据一样容易。 虽然 Java 不是函数式语言,但 Java 8 Lambda 表达式和方法引用 (Method References) 允许你以函数式编程。 在计算机时代早期,内存是稀缺和昂贵的。几乎每个人都用汇编语言编程。人们对编译器有所了解,但仅仅想到编译生成的代码肯定会比手工编码多很多字节。 通常,只是为了使程序适合有限的内...
2020-04-03 10:07:10
521
原创 第十二章 集合
第十二章 集合 如果一个程序只包含固定数量的对象且对象的生命周期都是已知的,那么这是一个非常简单的程序。 通常,程序总是根据运行时才知道的某些条件去创建新的对象。在此之前,无法知道所需对象的数量甚至确切类型。为了解决这个普遍的编程问题,需要在任意时刻和任意位置创建任意数量的对象。因此,不能依靠创建命名的引用来持有每一个对象: MyType aReference; 因为从来不会知道实际...
2020-04-03 10:05:50
715
1
原创 第十一章 内部类
第十一章 内部类 一个定义在另一个类中的类,叫作内部类。 内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可见性。然而必须要了解,内部类与组合是完全不同的概念,这一点很重要。在最初,内部类看起来就像是一种代码隐藏机制:将类置于其他类的内部。但是,你将会了解到,内部类远不止如此,它了解外围类,并能与之通信,而且你用内部类写出的代码更加优雅而清晰,尽管...
2020-04-03 09:56:11
286
原创 第九章 多态
第九章 多态 曾经有人请教我 “ Babbage 先生,如果输入错误的数字到机器中,会得出正确结果吗?” 我无法理解产生如此问题的概念上的困惑。 —— Charles Babbage (1791 - 1871) 多态是面向对象编程语言中,继数据抽象和继承之外的第三个重要特性。 多态提供了另一个维度的接口与实现分离,以解耦做什么和怎么做。多态不仅能改善代码的组织,提高代码的可读性,而且能创...
2020-04-03 09:55:12
460
原创 第十章 接口
接口和抽象类提供了一种将接口与实现分离的更加结构化的方法。 这种机制在编程语言中不常见,例如 C++ 只对这种概念有间接的支持。而在 Java 中存在这些关键字,说明这些思想很重要,Java 为它们提供了直接支持。 首先,我们将学习抽象类,一种介于普通类和接口之间的折中手段。尽管你的第一想法是创建接口,但是对于构建具有属性和未实现方法的类来说,抽象类也是重要且必要的工具。你不可能总是使用纯粹的...
2020-04-02 23:19:56
322
原创 第七章 封装
第七章 封装 访问控制(Access control)(或者隐藏实现(implementation hiding))与“最初的实现不恰当”有关。 所有优秀的作者——包括那些编写软件的人——都知道一件好的作品都是经过反复打磨才变得优秀的。如果你把一段代码置于某个位置一段时间,过一会重新来看,你可能发现更好的实现方式。这是重构(refactoring)的原动力之一,重构就是重写可工作的代码,使...
2020-04-02 23:18:25
319
原创 第八章 复用
第八章 复用 代码复用是面向对象编程(OOP)最具魅力的原因之一。 对于像 C 语言等面向过程语言来说,“复用”通常指的就是“复制代码”。任何语言都可通过简单复制来达到代码复用的目的,但是这样做的效果并不好。Java 围绕“类”(Class)来解决问题。我们可以直接使用别人构建或调试过的代码,而非创建新类、重新开始。 如何在不污染源代码的前提下使用现存代码是需要技巧的。在本章里,你将学习...
2020-04-02 23:17:42
472
转载 第六章 初始化和清理
第六章 初始化和清理 "不安全"的编程是造成编程代价昂贵的罪魁祸首之一。有两个安全性问题:初始化和清理。C 语言中很多的 bug 都是因为程序员忘记初始化导致的。尤其是很多类库的使用者不知道如何初始化类库组件,甚至他们必须得去初始化。清理则是另一个特殊的问题,因为当你使用一个元素做完事后就不会去关心这个元素,所以你很容易忘记清理它。这样就造成了元素使用的资源滞留不会被回收,直到程序消耗完所有的资...
2020-04-02 23:15:51
427
原创 第五章 控制流
第五章 控制流 程序必须在执行过程中控制它的世界并做出选择。 在 Java 中,你需要执行控制语句来做出选择。 Java 使用了 C 的所有执行控制语句,因此对于熟悉 C/C++ 编程的人来说,这部分内容轻车熟路。大多数面向过程编程语言都有共通的某种控制语句。在 Java 中,涉及的关键字包括if-else,while,do-while,for,return,break和选择语句sw...
2020-04-02 23:14:48
341
原创 第四章 运算符
第四章 运算符 运算符操纵数据。 Java 是从 C++ 的基础上做了一些改进和简化发展而成的。对于 C/C++ 程序员来说,Java 的运算符并不陌生。如果你已了解 C 或 C++,大可以跳过本章和下一章,直接阅读 Java 与 C/C++ 不同的地方。 如果理解这两章的内容对你来说还有点困难,那么我推荐你先了解下 《Thinking in C》 再继续后面的学习。 这本书现在可以在...
2020-04-02 23:11:08
1006
原创 第三章 万物皆对象
第三章 万物皆对象 如果我们说另外一种不同的语言,我们会发觉一个不同的世界!— Ludwig Wittgenstein (1889-1951) 相比 C++ ,Java 是一种更纯粹的面向对象编程语言。虽然它们都是混合语言,但在 Java 中,设计者们认为混合的作用并非像在 C++ 中那般重要。混合语言允许多种编程风格,这也是 C++ 支持向后兼容 C 的原因。正因为 C++ 是 C 语言...
2020-04-02 23:09:26
387
原创 第二章 安装Java和本书用例
第二章 安装Java和本书用例 现在,我们来为这次阅读之旅做些准备吧! 在开始学习 Java 之前,你必须要先安装好 Java 和本书的源代码示例。因为考虑到可能有“专门的初学者”从本书开始学习编程,所以我会详细地教你如何使用命令行。 如果你已经有此方面的经验了,可以跳过这段安装说明。如果你对此处描述的任何术语或过程仍不清楚,还可以通过Google搜索找到答案。具体的问题或困难请试着在S...
2020-04-02 23:07:35
276
原创 第一章 对象的概念
第一章 对象的概念 “我们没有意识到惯用语言的结构有多大的力量。可以毫不夸张地说,它通过语义反应机制奴役我们。语言表现出来并在无意识中给我们留下深刻印象的结构会自动投射到我们周围的世界。” -- Alfred Korzybski (1930) 计算机革命的起源来自机器。编程语言就像是那台机器。它不仅是我们思维放大的工具与另一种表达媒介,更像是我们思想的一部分。语言的灵感来自其他形式的表达,...
2020-04-02 23:05:47
4227
原创 On Java 8
第一章 对象的概念 第二章 安装Java和本书用例 第三章 万物皆对象 第四章 运算符 第五章 控制流 第六章 初始化和清理 第七章 封装 第八章 复用 第九章 多态 第十章 接口 第十一章 内部类 第十二章 集合 第十三章 函数式编程 第十四章 流式编程 第十五章 异常 第十六章 代码校验 第十七章 文件 第十八章 字符串 ...
2020-04-02 22:57:05
214
原创 OpenFeign入门
Feign是一个声明式WebService客户端,使用Feign能让编写的Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解,Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持Spring MVC标准注解和HttpMessageConverters。Feign和Eureka和Ribbon组合使用以支持负载均衡。 ...
2020-03-17 16:06:39
378
原创 Ribbon详解
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring C...
2020-03-16 14:16:35
758
原创 学习方法论
一直以来怎么学习都是一个很头疼的问题。兜兜转转,一直尝试了各种方法。 今天大概重新总结一下学习的思路吧。 从宏观层面上 了解最新的架构体系,知道要学什么。画出对应的思维导图。 针对单个技术的学习: 了解该技术的发展史,是因何产生的 ,用来解决什么问题的。 了解对比同种使用场景的技术,并对比优劣势,以及技术选型。 查看官网和一些博客,学习如果上手使用这门技术。 学习这门技术的实现原理,...
2020-03-15 11:46:51
187
原创 Spring Cloud之Zookeeper
上一篇文章我们看了一下Spring Cloud下的注册中心Eureka 由于不在维护,所以被其他的技术替代,今天就来看一下替代者之一的Zookeeper。 废话不多说,先来搭建一个简单的Zookeeper的案例吧。 首先去Zookeeper官网上下载zookeeper。我这里下载的是windows版的3.4.11。 接着我在idea中搭建一个项目,引入必要的依赖包 <?xml ve...
2020-03-11 16:15:08
282
原创 Eureka之路
Eureka众所周知主要用来做服务注册中心,在Spring Cloud全家桶里面有着自己的位置,不过随着官方的停止维护,Eureka逐渐慢慢的被其他的组件替代,例如zookeeper、nocas等等。但是对于很多之前的老项目可能还依然在使用Eureka,所以还是有必要了解以下它的一些设计的思想。 在学习Eureka之前我们要了解以下几个问题 什么是服务治理? Spring Cloud封装了N...
2020-03-10 16:45:33
206
原创 Spring 核心技术
核心技术 版本 5.2.4.RELEASE 参考文档的这一部分涵盖了Spring框架中不可获取的所有技术 其中最重要的是Spring的ioc(控制反转)容器,在对SpringIOC进行了全面的处理之后,还对SpringAOP技术进行了全面的介绍。Spring框架有它自己的AOP框架,并且在概念上容易理解,成功的解决了Java企业编程中AOP需求的80%功能点。 Spring还提供了对Asp...
2020-03-08 11:44:39
245
原创 集合之hashMap
hashMap是一个很常用,面试的时候也很常问到的一个集合。接下来 我们来分析一下HashMap里面的一些实现的原理吧。 首先分析一个事务,我们要先来了解一下它的结构。 hashMap的结构 数组 + 链表 + 红黑树 (jdk1.8)以后。 接下来我们大致的分析一下hashMap的存储流程来看一下为什么会是这个结构,首先向hashMap中存入数据,会计算当前数据的hashcode...
2020-03-05 15:18:00
167
原创 Mysql架构知识
最近在学习mysql45讲,写这个博客主要是为了加深学习的牢固程度。 首先mysql的结构大概分为两块: server和存储引擎 server包含了 : 连接器、查询缓存、分析器、优化器、执行器。 存储引擎大概有: InnoDB、MyIsAM、Memory 连接器 连接器作为和客户端建立连接、身份验证、保持连接、管理连接等。 mysql -h$ip -P$port -u$us...
2020-02-21 16:20:54
156
原创 java之集合类
java集合类是java中一个重要的知识体系模块。集合顾名思义是一堆数据的组成储存容器。相比于数组,集合更加灵活,不用初始化定义大小,集合内存会在存储空间使用完后进行自动扩容(这是一个比较耗费性能的事情),集合的存储数据类型更为广泛。 首先我们来看一下集合的整体的架构图。集合的顶端是一个Iterator。 下层分为 Collection接口和Map接口。Collection下分为Queue接口、...
2019-12-14 13:49:52
276
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人