![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java高级程序员晋升
文章平均质量分 88
跟我一起学Java
方寸之间不太闲
成长路
展开
-
第二十三章 Git
此例的意思就是,我们有一个叫做 master 的分支,并且该分支是当前分支。如你所见,我们创建了一个分支,在该分支上移除了一些文件 test.txt,并添加了 runoob.php 文件,然后切换回我们的主分支,删除的 test.txt 文件又回来了,且新增加的 runoob.php 不存在主分支中。- 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的 ID 被记录在暂存区的文件索引中。原创 2024-04-04 23:06:24 · 937 阅读 · 0 评论 -
第二十二章 Maven
在项目构建时,利用 Maven 的 "约定大于配置" 的思想,实现自动化的构建, 如果读者熟悉 Ant,可以清醒的感知 Maven 比 Ant 脚本构建项目省去不少配置文件的内容。快照依赖指的是那些还在开发中的内部依赖包。在 New Project 窗口,选择 Maven Archetyper,设置项目名称,选择项目地址,设置 JDK,选择 Maven 项目,设置 GorupId,选择 maven 项目,我们常用的就是普通项目(quickstart)和 web 项目(webapp),本次我们选择普通项目。原创 2024-04-04 15:24:29 · 1168 阅读 · 0 评论 -
第二十一章 RabbitMQ
春运抢票完全可以看作是一个大数据量、高并发请求的场景(全国几乎上千万、上亿的人都在抢),在某一时刻车票开抢之后,正常情况下将陆续会有用户抢到车票,但是距离车票付款成功是有一定的时间间隔的,在这段时间内,如果定时器频繁的从数据库中获取“未付款”状态的订单,其数据量之大将难以想象,而且如果大批量的用户在 30 分钟内迟迟不付款,那从数据库中获取的数据量将一直在增长,当达到一定程度时,将给数据库服务器和应用服务器带来巨大的压力,更有甚者将直接压垮服务器,导致抢票等业务全线崩溃,带来的直接后果将不堪设想!原创 2024-04-03 23:16:46 · 1210 阅读 · 0 评论 -
第二十章 红黑树
如果是添加根节点,则将节点设定为黑色。像这种上溢的情况,就需要从溢出的 B 树节点中选出一个节点进行向上合并,选择 B 树节点中中间的树去进行向上合并,这里中间的两个节点就是原父节点 17 和原祖父节点 25,选这两个哪一个向上合并都是对的,但是我们最好选择以后方便操作的,很显然,应该选择原祖父节点 25 来进行向上合并,因为向上合并就是和最上层的 38 和 55 来组合成新的 B 树节点,向上合并的节点肯定是一个子节点,需要与上层相连,而原祖父节点 25 本身就已经和上层连接了,相对更加方便后续的操作。原创 2024-04-03 14:09:56 · 751 阅读 · 0 评论 -
第十九章 UML
描述类的对象所有可能的状态,以及事件发生时状态的转移条件,可以捕获对象、子系统和系统的生命周期。区分 UML 模型和 UML 图是非常重要的,UML 图,包括用例图、协作图、活动图、序列图、部署图、构件图、类图、状态图,是模型中信息的图形表达方式,但是 UML 模型独立于 UML 图存在。类图概括起来主要由两部分组成 —— 类、类之间的关系, 其中对类的定义如上图所示, 主要由三部分组成, 它们是类名、 类的属性(成员变量)、 类的相关操作(函数方法), 分别对应图里的上中下三个分区内容。原创 2024-04-01 23:01:11 · 822 阅读 · 0 评论 -
第十八章 算法
一、介绍 1.1 什么是算法 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。1.2 什么是数据结构 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存原创 2024-04-01 22:21:34 · 1016 阅读 · 0 评论 -
第十七章 Kafka
通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。log.dirs 分别设置为`kafka-logs1、kafka-logs2、kafka-logs3(先创建)PS:如果遇到 zk node exists 的问题,先把 brokers 节点删掉(临时解决方案)。高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百万的消息。- 修改配置文件中的 broker.id 分别为 1、2、3。1. 进入 /usr/local/soft 目录;原创 2024-04-01 21:22:55 · 1325 阅读 · 0 评论 -
第十六章 Redies
Redis set 对外提供的功能与 list 类似是一个列表的功能,特殊之处在于 set 是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set 是一个很好的选择,并且 set 提供了判断某个成员是否在一个 set 集合内的重要接口,这个也是 list 所不能提供的。集合的成员是唯一的,但是评分可以是重复了。用户 ID 为查找的 key,存储的 value 用户对象包含姓名,年龄,生日等信息,如果用普通的 key/value 结构来存储。String 类型是二进制安全的。原创 2024-04-01 21:01:18 · 1094 阅读 · 0 评论 -
第十六章 Redies
内存存储,NoSQL。基于内存来存储数据。无需 IO,效率高。1. 基于磁盘存储,扩容困难。增加硬件、或者使用其他的技术(分库分表)。> Basically Available(基本可用)> 3. 表与表之间关联,Relationship。2. 数据结构固定(存储数据格式受限)。> 4. 支持海量数据存储,高效数据读写。3. 并发量大情况下读写压力大(IO)。> 2. 结构化,Schema。> 文档存储(MongoDB)> 5. 支持分布式分片存储。> KV 存储(Redis)哨兵模式,分布式数据存储。原创 2024-03-29 19:17:55 · 677 阅读 · 0 评论 -
第十五章 Nginx
location 不是严格匹配,而是一个“前缀匹配”过程,所以在上面那个案例中,两个 location 都能够匹配,但是普通匹配会遵循一个最长匹配规则,也就是上面的请求中,最终 uri 会匹配到长度最大 location。给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的 HTTP 头来判断,是否需要压缩。- ms(毫秒),s(秒),m(分钟),h(小时),d(天),w(周,包含 7 天),M(月,包含 30 天),y(年,包含 365 天)原创 2024-03-29 19:10:30 · 853 阅读 · 0 评论 -
第十四章 MySQL
存储引擎负责 MySQL 中数据的存储和提取。与其他应用程序相比,不同的应用程序对某些内存高速缓冲策略的响应更好,因此,尽管某些内存高速缓冲对所有存储引擎来说是共同的(如用于用户连接的高速缓冲,MySQL 的高速查询高速缓冲等),其他高速缓冲策略仅当使用特殊的存储引擎时才唯一定义。表空间是 innodb 存储引擎逻辑结构的最高层,所有的数据都存储在表空间中,默认 innodb 有一个共享表空间,所有的数据都存储在共享表空间中,可以通参数 innodb_per_table 设置每张表单独存放在一个表空间中。原创 2024-03-29 16:46:07 · 1025 阅读 · 0 评论 -
第十三章 Tomcat优化
实现类:实现 org.apache.catalina.Service 接口的类,默认值为org.apache.catalina.core.StandardService。- 实现类:实现 org.apache.catalina.Server 接口的类,默认值为org.apache.catalina.core.StandardServer。- 实现类 实现org.apache.catalina.Host接口的类,默认值为org.apache.catalina.core.StandardHost。原创 2024-03-29 16:07:53 · 592 阅读 · 0 评论 -
第十二章 微服务核心(二)
Eureka 采用了 CS 的设计架构,Eureka Sever 作为服务注册功能的服务器,它是服务注册中心。Eureka Server 维护了一个可用服务列表,存储了所有注册到 Eureka Server 的可用服务节点的信息,服务节点的信息可以在 Eureka Server 的管理界面中直观看到。:在传统的 RPC 远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。原创 2024-03-29 15:46:17 · 1122 阅读 · 0 评论 -
第十二章 微服务核心(一)
SpringBoot 默认的处理异常的机制:SpringBoot 默认的已经提供了一套处理异常的机制。是将@Import 注解中添加的 ImportSelector 的实现类中的 selectImports 这个方法返回的字符串数组加载到 IoC 容器中。”) //每个季度的第一个月的一号的 1:00:00 执行一次。”) //一月和六月的一号的 1:00:00 执行一次。Thymeleaf 的模板页面的后缀是`.html` 和我们讲的 html 页面的后缀是一样,但可以写标签。原创 2024-03-29 00:51:53 · 1132 阅读 · 0 评论 -
第十一章 Liunx
之前我们项目配置使用了 123456,这里我们为了方便可以继续沿用这一密码,但还是那句话,在实际生产环境中,强烈不建议使用如此简单的密码,而且 Web 应用尽量不要使用 root 连接数据库,不然一旦被攻击者利用,受害面积将大大增加。vim 是一个非常好用的文本编辑器,它里面有很多非常好用的命令,在这里不再多说。如图,有各种不同的版本,DVD 版内置了比较常用的功能,Everything 就是什么都有,Minimal 就是只有基础的功能,因为安装的时候会再次选择需要安装的组件,这里实际上是向下兼容。原创 2024-03-28 21:11:01 · 1283 阅读 · 0 评论 -
第十章 MyBatis
3. 设置【Group】、【Artifact】、【Java Version】和【Package】,然后点击【Next】;5. 设置好【Project name】和【Project location】,点击【Finish】;2. 点击[Spring Initializr],然后点击【Next】;1.6 新建【UserInfoServiceImpl】1.8 修改【UserInfoMapper.java】1.9 修改【UserInfoMapper.xml】4. 点击【Next】;原创 2024-03-28 19:30:45 · 432 阅读 · 0 评论 -
第九章 Spring5 高级应用及核心原理(四)
3. 右击【resources】-->【New】-->【XML Configuration File】-->【Spring Config】,【spring-mvc.xml】;2.【src/main】下新建【resources】目录,右击【resources】-->【Mark Directory as】-->【Resources Root】;4. 【view】-->【Tool Windows】-->【Maven】-->【Plugins】-->【tomcat7】 -->【run】测试运行;原创 2024-03-24 20:34:50 · 640 阅读 · 0 评论 -
第九章 Spring5 高级应用及核心原理(三)
【IUserService】新增 addUserInfo 和 transaction 接口;- 【UserServiceImpl】新增 addUserInfo 和 transaction;- 【UserDaoImpl】实现 addUserInfo 和 transaction 接口;- 在【UserServicImpl】的【transaction】方法上添加【@GpTx】注解。- 【IUserDao】新增 addUserInfo 和 transaction 接口;- 修改【UserServicImpl】原创 2024-03-24 19:43:42 · 342 阅读 · 0 评论 -
第九章 Spring5 高级应用及核心原理(二)
所谓交叉业务逻辑是指,通用的、与主业务逻辑无关的代码,如安全检查、事务、日志等。目标对象没有实现任何的接口,只能使用 CGLIB 代理,CGLIB 的本质其实的代理类继承了目标对象,并重写相关方法。执行结果:fun1 之前没有输入 before ...... ,而 fun2 之前有 before ......。目标对象执行之后的操作......(演出完之后的安排)目标对象 before ... ...目标对象 before ... ...目标对象 after ... ...原创 2024-03-24 19:11:35 · 544 阅读 · 0 评论 -
第九章 Spring5 高级应用及核心原理(一)
控制反转意味着在系统开发过程中,设计的类将交由容器去控制,而不是在类的内部去控制,类与类之间的关系将交由容器处理,一个类在需要调用另一个类时,只要调用另一个类在容器中注册的名字就可以得到这个类的实例,与传统的编程方式有了很大的不同,“不用你找,我来提供给你”,这就是控制反转的含义。Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson 的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架。原创 2024-03-24 17:00:45 · 733 阅读 · 0 评论 -
第八章 常用设计模式(下)
状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理。状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用,例如公文状态的转换、游戏中角色的升级等。原创 2024-03-23 15:59:53 · 1254 阅读 · 0 评论 -
第八章 常用设计模式(上)
里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。3. 工厂方法模式可以用在异构项目中,例如通过 WebService 与一个非 Java 的项目交互,虽然 WebService 号称是可以做到异构系统的同构化,但是在实际的开发中,还是会碰到很多问题,如类型问题、WSDL 文件的支持问题,等等,从 WSDL 中产生的对象都认为是一个产品,然后由一个具体的工厂类进行管理,减少与外围系统的耦合。原创 2024-03-22 01:22:59 · 2396 阅读 · 0 评论 -
第七章 七大软件设计原则
封装变化, 也就是受保护的变化(protected variations) , 找出预计有变化或不稳定的点, 我们为这些变化点创建稳定的接口, 准确地讲是封装可能发生的变化, 一旦预测到或“第六感”发觉有变化, 就可以进行封装。- 如果对每一个类型为 P 的对象 op1,都有类型为 S 的对象 os1,使得以 P 定义的所有程序 Px 在所有的对象 oP1 都代换成 os1 时,程序 Px 的行为没有发生变化,那么类型 S 是类型 T 的子类型。使程序的可移植性降低,也增强了对象间的耦合性。原创 2024-03-21 20:54:11 · 253 阅读 · 0 评论 -
第六章 Java 正则表达式
所以,在其他的语言中(如 Perl),一个反斜杠 \ 就足以具有转义的作用,而在 Java 中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。也可以简单的理解在 Java 的正则表达式中,两个 \\ 代表其他语言中的一个 \,这也就是为什么表示一位数字的正则表达式是 \\d,而表示一个普通的反斜杠是 \\。在其他语言中,\\表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。例如,正则表达式 (dog) 创建了单一分组,组里包含"d","o",和"g"。原创 2024-03-21 20:39:15 · 1058 阅读 · 0 评论 -
第五章 JVM
6、为了验证自己的猜想,于是准备登录后台去测试下,结果在测试的过程中发现到处订单的按钮前端居然没有做点击后按钮置灰交互事件,结果按钮可以一直点,因为导出订单数据本来就非常慢,使用的人员可能发现点击后很久后页面都没反应,结果就一直点,结果就大量的请求进入到后台,堆内存产生了大量的订单对象和 EXCEL 对象,而且方法执行非常慢,导致这一段时间内这些对象都无法被回收,所以最终导致内存溢出。但是,进行标记之后,存活的对象会移动到堆的一端,然后直接清理存活对象以外的区域就可以了。原创 2024-03-21 20:12:02 · 893 阅读 · 0 评论 -
第四章 Java 网络编程
可以看到,鉴于电子商务等安全上的需求,HTTPS 对比 HTTP,在安全方面已经取得了极大的增强。总结来说,HTTPS 的改进点在于创造性的使用了非对称加密算法,在不安全的网路上,安全的传输了用来进行对称加密的密钥,综合利用了非对称加密的安全性和对称加密的快速性。A: 客户端发起 HTTPS 请求,服务端返回证书,客户端对证书进行验证,验证通过后本地生成用于改造对称加密算法的随机数,通过证书中的公钥对随机数进行加密传输到服务端,服务端接收后通过私钥解密得到随机数,之后的数据交互通过对称加密算法进行加解密。原创 2024-03-18 21:21:29 · 960 阅读 · 0 评论 -
第三章 网络 IO
所以注意通道本身不能传输数据,要想传输数据必须要有缓冲区,这个缓冲区你就可以完全把它理解为火车,比如说你现在想把程序中的数据写到文件中,那么你就可以把数据都写到缓冲区,然后缓冲区通过通道进行传输,最后再把数据从缓冲区拿出来写到文件中,你想把文件中的数据传数到程序中,也是一个道理,把数据写到缓冲区,缓冲区通过通道进行传输,到程序中把数据拿出来。有时候会有这样的问题,当数据不足以填充缓冲区,而又需要往客户端传数据,为了解决这个问题,就有了 flush 的概念,将缓冲区的数据强迫发送。是专门用于应用程序的。原创 2024-03-13 22:49:41 · 1012 阅读 · 0 评论 -
第二章 并发编程
一、线程的基本知识1.1 线程的概念是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一个进程可以有很多线程,每条线程并行执行不同的任务。 为什么会有线程?- 在多核CPU中,利用多线程可以实现真正意义上的并行执行。- 在一个应用进程中,会存在多个同时执行的任务,如果其中一个任务 被阻塞,将会引起不依赖该任务的任务也被阻塞。通过对不同任务创 建不同的线程去处理,可以提升程序处理的实时性。- 线程可以认为是轻量级的进程,所以线程的创建、销毁比进程更快。原创 2024-03-12 15:37:23 · 999 阅读 · 0 评论 -
第一章 Java核心内容
但在面试时,若出现对数组操作的题目,就决不允许使用 Arrays 类提供的方法,因为面试官考察的是我们对数组的操作能力,而不是对 Arrays 类的应用。Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。比如上述代码中的 T ,我们可以换成 A-Z 之间的任何一个 字母都可以,并不会影响程序的正常运行,但是如果换成其他的字母代替 T ,在可读性上可能会弱一些。原创 2024-03-04 23:13:18 · 969 阅读 · 0 评论