自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

惊却一目

个人博客:www.jingqueyimu.com

  • 博客(32)
  • 收藏
  • 关注

原创 小白的 Python 修炼手册:入门篇

Life is short, you need Python。(人生苦短,我用 Python。)——Bruce Eckel前言听说现在是全民 Python 的时代,虽然不知道事实如何,但学会 Python 的确可以做很多事。据我了解,Python 目前主要有五大用途:网站开发、网络爬虫、人工智能、数据分析、自动化运维。而对于职场人士来说,Python 则可以用来进行自动化办公。除此之外,如果你想自己开发一些小游戏、小工具,Python 也是一个不错的选择。相较于其他编程语言,Python 不仅上..

2021-08-06 21:44:40 612

原创 Netty 面试必备知识点

1、Netty 简介是一个基于 NIO 的、异步的、事件驱动的网络通信框架。简化了 TCP、UDP 等网络编程。支持多种协议,如 FTP、SMTP、HTTP 等。2、Netty 特点高并发:基于 NIO,相比 BIO,并发性得到了很大的提高。传输快:传输依赖于零拷贝。封装好:封装了 NIO 操作的很多细节,提供易于使用的 API。3、Netty 应用场景实现特定协议的服务器,比如 HTTP 服务器。作为 RPC 框架的网络通讯工具,比如 Dubbo。实现即时通讯系统。实现消

2021-05-24 20:56:30 266 3

原创 Redis 面试必备知识点

1、Redis 简介是一个用 C 语言开发的,高性能的键值对数据库。数据存在于内存,读写速度快。可用来做缓存、分布式锁、消息队列。提供多种数据类型来支持不同的业务场景。支持事务、持久化、Lua 脚本、多种集群方案。2、Redis 与 Memcached 对比共同点:都是基于内存的数据库,常用来做缓存。都有过期策略。性能都非常高。区别:Redis 支持多种数据类型;而 Memcached 只支持 string。Redis 支持数据持久化;而 Memcached 不支持。R

2021-05-05 21:01:46 302 1

原创 MySQL 面试必备知识点

1、MySQL 基本架构Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,以及通用的 binlog 日志模块。连接器:管理连接,身份、权限验证。查询缓存:缓存查询结果集,key 为 SQL 语句,value 为结果集。8.0 版本后已移除。分析器:分析 SQL 语句用途及语法是否正确,包括词法分析、语法分析。没有命中缓存才进入分析器。优化器:选择一条 MySQL 认为最优的执行计划。执行器:执行语句,调用存储引擎,返回执行数据。存储引擎层:负责数据的存储和读取。插

2021-04-09 23:19:09 449

原创 肝了一个半月的 Java 项目快速开发脚手架:Chewing

前言闲来无事,整一个 Java 项目快速开发脚手架。正文一、简介Chewing 是一个简单的 Java 项目快速开发脚手架。既适合需要开发小型项目的小伙伴使用,也适合刚入门的新手用来学习一些常用的技术。二、源码源码地址:https://github.com/jingqueyimu/chewing。三、核心技术1、后端SpringBoot:Web 应用框架。Mybatis:持久层框架。MySQL:关系型数据库。Redis:缓存数据库。RabbitMQ:消息队列中间件。2、前端

2021-02-02 20:53:44 162 1

原创 《Head First 设计模式》:与设计模式相处

正文一、设计原则1、封装变化找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。2、针对接口编程,不针对实现编程“针对接口编程”真正的意思是“针对超类型编程”。超类型可以是抽象类或者接口,关键是要利用多态,这样程序执行时会根据实际状况执行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”可以更明确地说成:变量的声明类型应该是超类型,如此,只要是具体实现此超类型的类所产生的对象,都可以指定给这个变量。这也意味着,声明类时不用理会以后执行时的真正对象类型。3

2020-10-30 21:48:33 137

原创 《Head First 设计模式》:剩下的模式

正文一、桥接模式1、定义桥接模式通过将实现和抽象分离开来,放在两个不同的类层次中,从而使得它们可以独立改变。要点:当一个类存在两个独立变化的维度,而且都需要进行扩展时,可以将其中一个维度抽象化,另一个维度实现化。抽象化就是通过抽象类来实现多态,实现化则是通过接口来实现多态。桥接模式通过在抽象类中持有实现类接口,来将两个维度“桥接”起来。2、实现步骤(1)创建实现化角色接口/** * 实现化角色接口 */public interface Implementor { vo

2020-10-25 22:42:39 105

原创 《Head First 设计模式》:代理模式

正文一、定义代理模式为另一个对象提供一个替身或占位符以控制对这个对象的访问。要点:代理模式为一个对象创建了代理对象,让代理对象控制对该对象的访问。被代理的对象可以是远程的对象、创建开销大的对象或者需要安全控制的对象。代理类型:远程代理、虚拟代理、保护代理等。远程代理:控制访问远程对象。虚拟代理:控制访问创建开销大的资源。保护代理:基于权限控制对资源的访问。二、实现步骤1、创建主题接口/** * 主题接口 */public interface Subject {

2020-09-28 23:37:11 206

原创 《Head First 设计模式》:状态模式

正文一、定义状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。要点:状态模式允许一个对象基于内部状态而拥有不同的行为。状态模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象。通过将每个状态封装进一个类,我们把以后需要做的任何改变局部化了。二、实现步骤1、创建状态接口/** * 状态接口 */public interface State { /** * 根据状态进行处理的方法 */ public voi

2020-09-21 22:42:37 379

原创 《Head First 设计模式》:组合模式

正文一、定义组合模式允许你将对象合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理组合对象以及个体对象。组合对象:包含其他组件的组件。个体对象(叶节点对象):没有包含其他组件的组件。要点:组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点。通过将组合对象和个体对象放在树形结构中,我们创建了一个“整体/部分”层次结构。如果将整个树形结构视为一个“大组合”的话,那么这个树形结构的每一个“子树形结构”也是一个组合,包括叶节点也可以被视为一个不包含其他对象的组合。

2020-09-13 20:47:29 142

原创 《Head First 设计模式》:迭代器模式

正文一、定义迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。要点:迭代器模式把在元素之间游走的责任交给迭代器,而不是聚合对象。这样简化了聚合的接口和实现,也让责任各得其所。二、实现步骤1、创建迭代器接口/** * 迭代器接口 */public interface Iterator { /** * 是否有下一个元素 */ public boolean hasNext(); /** * 获取

2020-09-07 22:06:25 194

原创 《Head First 设计模式》:模板方法模式

正文一、定义模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。要点:模板方法定义了一个算法的步骤,每个步骤都被一个方法所代表,而这几个方法的具体实现可由子类提供。模板方法可确保算法的结构保持不变,同时由子类提供部分实现。二、实现步骤1、创建一个抽象类,并定义模板方法模板方法一般声明为 final,以免子类改变算法的步骤。抽象类中,可以声明一些钩子方法,子类视情况决定要不要覆盖它们。钩子的存在,可

2020-08-30 21:51:33 179

原创 《Head First 设计模式》:外观模式

正文一、定义外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。要点:外观模式将一个或数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。通过将子系统的方法封装到外观的方法中,可以达到对子系统的“一键操作”。外观模式的意图是简化接口,好让一个子系统更易于使用。外观模式将客户从组件的子系统中解耦。二、实现步骤1、创建子系统组件类(1)子系统组件A/** * 子系统组件A */public class ComponentA

2020-08-24 22:01:06 120

原创 《Head First 设计模式》:适配器模式

正文一、定义适配器模式将一个类的接口(被适配者),转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。要点:适配器实现了目标接口,并持有被适配者的实例。适配器使用被适配者的方法,把请求转换成被适配者的一个或多个方法。客户通过目标接口调用适配器的方法对适配器发出请求。客户与被适配者是解耦的,一个不知道另一个。当需要使用一个现有的类而其接口并不符合你的需要时,就使用适配器。二、实现步骤1、创建被适配者接口/** * 被适配者接口 */public interfac

2020-08-18 21:24:58 383

原创 《Head First 设计模式》:命令模式

正文一、定义命令模式将“请求”封装成对象(命令对象),以便使用不同的“请求”来参数化其他对象。要点:命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。被解耦的两者之间通过命令对象进行沟通。命令对象封装了接收者和一个或多个动作。命令对象提供一个 execute() 方法,该方法封装了接收者的动作。当此方法被调用时,接收者就会执行这些动作。调用者持有一个或多个命令对象,通过调用命令对象的 execute() 方法发出请求,这会使得接收者的动作被调用。二、实现步骤1、创建接收者类接

2020-08-10 22:09:39 134

原创 《Head First 设计模式》:单件模式

正文一、定义单件模式确保一个类只有一个实例,并提供一个全局访问点。要点:定义持有唯一单件实例的类变量。私有化构造,避免其他类产生实例。对外提供获取单件实例的静态方法。二、实现步骤1、创建单件类(1)方式一:懒汉式延迟创建单件实例。线程不安全:/** * 单件类(懒汉式、线程不安全) */public class Singleton { /** * 唯一单件实例 */ private static Singleton uniqueInst

2020-08-01 22:01:39 113

原创 《Head First 设计模式》:抽象工厂模式

正文一、定义抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。要点:抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产品的具体产品是什么。这样一来,客户就从具体的产品中被解耦。抽象工厂的任务是定义一个负责创建一组产品的接口。这个接口内的每个方法都负责创建一个产品,同时利用实现抽象工厂的子类来提供具体的做法。抽象工厂的方法经常以工厂方法的方式实现。二、实现步骤1、创建产品抽象类(1)产品A抽象类/** * 产品A抽象类 */pub

2020-07-26 21:32:38 128

原创 《Head First 设计模式》:工厂方法模式

正文一、定义工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。PS:在设计模式中,“实现一个接口”泛指实现某个超类型(可以是类或接口)的某个方法。要点:通过子类来创建具体的对象。客户只需要知道他们所使用的抽象类型即可。由子类决定要实例化的类是哪一个,是指在编写创建者类时,不需要知道实际创建的产品是哪一个。选择了使用哪个创建者子类,自然就决定了实际创建的产品是什么。对象统一由定义好的工厂方法来创建。二、实现步骤1、创建产品抽象类/*

2020-07-20 21:59:13 115

原创 《Head First 设计模式》:装饰者模式

正文一、定义装饰者模式动态地将责任(功能)附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。要点:装饰者和被装饰者有相同的超类型。可以用一个或多个装饰者包装一个对象。既然装饰者和被装饰者有相同的超类型,所以在任何需要原始对象(被装饰者)的场合,都可以用装饰过的对象代替它。装饰者可以在被装饰者的行为之前与/或之后,加上自己的行为,甚至将被装饰者的行为整个取代掉,以到达特定的目的。对象可以在任何时候被装饰,所以可以在运行时动态地、不限量地用装饰者装饰对象。装饰者会导致设计中出

2020-07-13 22:09:25 125

原创 《Head First 设计模式》:观察者模式

正文一、定义观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。要点:观察者模式定义了对象之间一对多的关系。观察者模式让主题(可观察者)和观察者之间松耦合。主题对象管理某些数据,当主题内的数据改变时,会以某种形式通知观察者。观察者可以订阅(注册)主题,以便在主题数据改变时能收到更新。观察者如果不想收到主题的更新通知,可以随时取消订阅(注册)。二、实现步骤1、创建主题父类/接口主题父类/接口主要提供了注册观察者、移除观察者、通知

2020-07-03 22:36:51 188

原创 《Head First 设计模式》:策略模式

正文一、定义策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。要点:策略模式把系统中会变化的部分抽出来封装。二、实现步骤1、创建策略接口/** * 策略接口 */public interface Strategy { /** * 执行策略行为 */ public void perform();}2、创建策略接口的实现类(1)策略实现类 A/** * 策略实现类A */public class Strate

2020-05-27 20:44:06 348

原创 《深入理解 Java 虚拟机》笔记整理

正文一、Java 内存区域与内存溢出异常1、运行时数据区域程序计数器:当前线程所执行的字节码的行号指示器。线程私有。Java 虚拟机栈:Java 方法执行的内存模型。线程私有。本地方法栈:Native 方法执行的内存模型。线程私有。Java 堆:存放对象实例。分为新生代(Eden 空间、From Survivor 空间、To Survivor 空间)和老年代。线程共享。方法区:存...

2020-04-16 21:51:00 174

原创 《深入理解 Java 虚拟机》读书笔记:线程安全与锁优化

正文一、线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。1、Java 语言中的线程安全按线程安全的“安全程度”由强至弱排序,可以将多个线程的共享数据分为 5 类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。(1)不可...

2020-04-07 23:18:10 135

原创 《深入理解 Java 虚拟机》读书笔记:Java 内存模型与线程

正文由于计算机的处理器运算速度与它的存储和通信子系统速度的差距太大了,大量的时间都花费在磁盘 I/O、网络通信或者数据库访问上,导致处理器在大部分时间里都处于等待其他资源的状态。因此,为了充分利用计算机的处理器运算能力,现代计算机操作系统采用了多任务处理的方式,即让计算机并发处理多个任务。对于计算量相同的任务,程序线程并发协调得越有条不紊,效率自然就会越高;反之,线程之间频繁阻塞甚至死锁,将会...

2020-04-01 23:18:23 99

原创 《深入理解 Java 虚拟机》读书笔记:晚期(运行期)优化

正文在部分商用虚拟机(Sun HotSpot、IBM J9)中,Java 程序最初是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机会把这些代码编译成本地机器码,并进行各种层次的优化。完成这个任务的编译器称为即时编译器(Just In Time Compiler,简称 JIT 编译器)。Jav...

2020-03-29 22:06:35 136

原创 《深入理解 Java 虚拟机》读书笔记:早期(编译期)优化

正文Java 语言的 3 类编译器:前端编译器:把 java 文件 转变成 class 文件。例如:Sun 的 Javac。JIT 编译器(即时编译器):后端运行期编译器,把字节码转变成机器码。例如:HotSpot VM 的 C1、C2 编译器。AOT 编译器(静态提前编译器):直接把 java 文件编译成本地机器代码。例如:GCJ(GNU Compiler for the Java)。...

2020-03-22 20:40:42 165

原创 《深入理解 Java 虚拟机》读书笔记:虚拟机字节码执行引擎

正文执行引擎是 Java 虚拟机最核心的组成部分之一。在不同的虚拟机实现里,执行引擎在执行 Java 代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也可能两者兼备。但从外观上看,所有 Java 虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。物理机与虚拟机的执行引擎:物理机的执行引擎:直接建立...

2020-03-15 23:24:04 177

原创 《深入理解 Java 虚拟机》读书笔记:虚拟机类加载机制

正文虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。一、类加载的时机1、类的生命周期加载 -> 连接(验证、准备、解析) -> 初始化 -> 使用 -> 卸载加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按这种顺序按部就班...

2020-03-09 22:00:39 88

原创 《深入理解 Java 虚拟机》读书笔记:类文件结构

正文一、无关性的基石1、两种无关性平台无关性: Java 程序的运行不受计算机平台的限制,“一次编写,到处运行”。语言无关性: Java 虚拟机只与 Class 文件关联,并不关心 Class 文件的来源是何种语言。2、无关性的实现基础各种不同平台的虚拟机所有平台都统一使用的字节码存储格式二、Class 类文件的结构Class 类文件是一组以 8 字节为基础单位的二进制流...

2020-02-28 23:52:24 165

原创 《深入理解 Java 虚拟机》读书笔记:虚拟机性能监控与故障处理工具

正文一、JDK 的命令行工具JDK 的 bin 目录下提供了一些用于监视虚拟机和故障处理的命令行工具。名称主要作用jpsJVM Process Status Tool,显示正在运行的虚拟机进程jstatJVM Statistics Monitoring Tool,收集虚拟机各方面的运行数据jinfoConfiguration Info for Java,...

2020-01-14 22:45:41 206

原创 《深入理解 Java 虚拟机》读书笔记:垃圾收集器与内存分配策略

正文垃圾收集器关注的是 Java 堆和方法区,因为这部分内存的分配和回收是动态的。只有在程序处于运行期间时才能知道会创建哪些对象,也才能知道需要多少内存。虚拟机栈和本地方法栈则不需要过多考虑回收的问题,因为栈中每一个栈帧分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收具有确定性。一、对象已死吗垃圾收集器在对堆进行回收前,第一件事就是要确定堆中对象哪些还“存活”...

2019-12-22 22:47:53 114

原创 《深入理解 Java 虚拟机》读书笔记:Java 内存区域与内存溢出异常

前言最近开始看这本书,记得前段时间拿起这本书的时候,心情是相当沉重的!当时的剧本是这样的——内景。家里 - 下午我(画外):唉,有点无聊啊!(偶然撇过书架)这么多书得看到什么时候啊,要不要拿一本翻翻呢?但是在家里好像有点看不下去啊,是太安逸了吗?最近那本《图解 HTTP》也还没看完,感觉暂时有点不想看了。(走到书架前)还是挑几本优先级比较高的带到███下班的时候看吧。(沉思)嗯,这本带过去...

2019-12-04 22:00:48 127

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除