- 博客(46)
- 收藏
- 关注
原创 15. 委派模式 Delegate Pattern
委派模式 Delegate Pattern模式定义:基本作用就是负责任务的调度和分配任务,跟代理模式很像,可以看做是一种特殊情况下的静态代理的全权代理,但是代理模式注重过程,而委派模式注重结果。不属于GOF 23种设计模式之一BOSS -> Leader -> EmployeeA 擅长加密-> EmployeeB 擅长架构属于行为型模式典型应用:以Delegate或者dispatcher结尾的类...
2021-11-08 10:39:12 153 1
原创 14. 代理模式
代理模式模式定义:为其他对象提供一种代理,以实现控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介作用。属于结构型设计模式。分为:静态代理 (显示的声明被代理对象,对对象有限制,不符合开闭原则,对象变化了代理类也要变化),动态代理模式(对对象没有限制)目的:保护对象 , 增强对象JDK是采用读取接口的信息(对应用户而言必须有一个接口实现(接口数小于65535),目标类相对较复杂,生成的代理逻辑简单,执行效率相对较低,每次反射动态调用)CGLib时通过覆盖父类方法(可以代理任何一个类,.
2021-11-08 10:38:38 148
原创 13. 责任链模式 Chain Of Responsibility
责任链模式 Chain Of Responsibility模式定义:为请求创建了一个接收者对象的链典型应用:jakarta.servlet.Filter jakarta.servlet.FilterChain xxxHandler类优点:请求的发送者和接受者解耦可以控制执行顺序符合开闭原则和单一职责原则责任链 Handler可以定义为一个抽象类,里边包含一个next和process(),setnext()参考:http://c.bianche..
2021-11-08 10:38:08 172
原创 12. 观察者模式 Observer
观察者模式 Observer模式定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,他的所有依赖者都会收到通知并更新典型应用:java.util.Observable ApplicationListener优点:符合开闭原则可以在运行时建立对象之间的关系主题对象能够增删和通知观察者(可以定义为接口类,产生多个子类)主题对象需要有一个容器,更新时遍历容器去通知。...
2021-11-08 10:37:19 112
原创 11. 模板方法模式 Template Method
模板方法模式 Template Method模式定义:定义一个操作的算法股价,而将一些步骤延迟到子类中。模板方法类使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。最主要的是不能用interface接口类,而是要用AbstractClass抽象类典型应用:在模板类中写一个方法,并编到执行顺序中,子类来实现 jakarta.servlet.http.HttpServlet#service(jakarta.servlet.http.HttpServletRequest, jakarta...
2021-11-08 10:35:45 68
原创 10.装饰者模式 Decorator
装饰者模式 Decorator模式定义:在不改变原有对象的基础上,将功能附加到对象上,可以是一个抽象类典型应用:HttpServletRequestWrapper 拓展一个类的功能,或给一个类增加附加职责优点:1. 不改变原有对象的情况下给一个对象扩展功能2. 使用不同的组合可以实现不同的效果3. 符合开闭原则**方法定义成抽象的**可以让子类去具体实现来扩展不一样的功能...
2021-11-08 10:35:25 83
原创 9.适配器模式
适配器模式 Adapter模式定义:将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一块工作的那些类可以一起工作,就像手机充电器典型应用:ApplicationListener当希望使用某些现有类,但其接口与其他代码不兼容时,可以使用适配器类当希望重用几个现有的子类,这些子类缺少一些不能添加到超类中的公共功能时,使用该模式优点:符合单一职责原则符合开闭原则对象的适配器(使用组合,需要使用原始对象作为参数构建新对象) 类的适配(使用继承,..
2021-11-08 10:34:35 93
原创 8.门面模式
门面模式 Facade(外观模式)模式定义:为子系统中的一组接口提供一个一致的接口,Facade 模式定义了一个高层接口,这个接口使得这一子系统更容易使用典型应用:系统级应用(按钮) requestfacade(拿到数据的是这个类,但处理实在下层的coyote来处理)优点:简化客户端的调用...
2021-11-07 18:58:37 106
原创 7.享元模式
享元模式 Flayweight模式定义:运用共享技术有效地支持大量细粒度的对象,所有不同的类对象只创建一次典型应用:游戏中的树,使用***CocurrentHashMap***来保存树的元数据,如果已经存在直接从工厂类中返回已有树,如果没有再在map中增加元数据并返回java.lang.Stringjava.lang.Integercom.sun.org.apache.bcel.internal.generic.InstructionConstants优点:如果系统有大量类似的对象,可以..
2021-11-07 18:58:06 1922
原创 6.原型模式
原型模式 Prototype模式定义:指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype典型应用:当代码不应依赖于需要复制的对象的具体类时,请使用原型模式AbstractBeanDefinitionjava.util.Arrays优点:可以不耦合具体类的情况下克隆对象避免重复的初始化代码(直接内存复制,不走类的构建函数,因此单例模式和原型模式是冲突的,使用时要注意)更方便的构建复杂对象,比直接ne..
2021-11-07 18:57:39 78
原创 5.建造者模式
建造者模式模式定义:先new一个builder建造者(get/set/build在这个类中实现),然后new一个director指导者(在这个类中指定创建顺序),然后在用指导者按照参数进行创建product典型应用:需要生成的对象具有复杂的内部结构需要生成的对象内部属性本身相互依赖有不可变对象配合使用RequestMappingInfoBeanDefinitionBuilder优点:可以使代码高内聚,product中不用写默认值 1. 建造者独立,易扩展 2.便于控制..
2021-11-07 18:57:00 151
原创 3-4.简单工厂模式,工厂模式,抽象工厂模式
工厂方法模式 Factory Method模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使得一个类的实例化延迟到子类典型应用:各种factory 1. 当不知道该使用对象的确切类型的时候 2.当希望为库或者框架提供扩展其内部组件的方法时优点:1. 将具体产品和创建者解耦 2.符合单一职责原则 3.符合开闭原则把稳定的部分抽出来形成interface接口或者abstract抽象类,然后在子类中new各自不同的对象new对象是不变的部分时可以使用..
2021-11-07 18:56:32 79
原创 2.策略模式
策略模式 strategyjdk1.8之后接口类中才有方法实现,而且是必要要实现comapre方法和eauqls方法重点理解Comparable接口(中需要自己实现compareTo方法,只有一个比较策略)和Comparator接口(才是策略模式,传参中带有new的比较器类对象,比Comparable的优点是可以实现多种比较器对象,实现多种比较策略,例如sort算法实现了这个接口)策略类一般都是interface接口类中默认都是public,也可以使用泛型来定义模式定义:变化当中有稳定的部分,解..
2021-11-07 18:55:16 90
原创 1.单例模式
单例模式 singleton参考:https://blog.csdn.net/wayne_lee_lwc/article/details/104228469?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-8.no_search_link&spm=1001.2101.3001.4242.8模式定义:保障一个类只有一个实例,并且提供一个全局访问点(外部不能进行实例化,内部需要实例化一..
2021-11-07 18:54:26 83
转载 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
概念和区别SELECT … LOCK IN SHARE MODE走的是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的session执行完成(否则直接锁等待超时)。SELECT … FOR UPDATE 走的是IX锁(意向排它锁),即在符合条件的rows上都加了排它锁,其他session也就无法在这些记录上添加任何的S锁或X锁。如果不存在一致性非锁定读的话,那么其他session是无法读取
2021-11-07 18:40:16 716
转载 mysql的共享锁(S)、排他锁(X)、意向共享锁(IS)、意向排他锁(IX)的关系
一.S锁和X锁兼容性加锁方式S锁:共享锁加了S锁的记录,允许其他事务再加S锁,不允许其他事务再加X锁select…lock in share modeX锁:排他锁加了X锁的记录,不允许其他事务再加S锁或者X锁select…for update二.意向锁:表锁,相互兼容,表明“某个事务持有了锁、或准备去持有锁”1、意向锁的存在是为了协调行锁和表锁的关系,支持多粒度(表锁与行锁)的锁并存。2:1)意向共享锁(IS锁):事务在请求S锁前,要先获得IS锁2)意向排
2021-11-07 18:30:00 3949
转载 一条mysql语句是事务吗_mysql中事务
事务控制语言什么叫做“事务”:想象一个场景:小明给小花 汇款 5000元 买IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行:update 存款表set money = money - 5000 where账户=’小明’;update 存款表set money = money + 5000 where账户=’小花’;当,第一条语句执行成功,突然断电了(或任何其他情况),就会造成数据的“不一致”。要解决这个问题,就是“事务”的功能:事务就是用来保证多
2021-11-07 18:21:53 1148
原创 Volatile指令重排序问题
CPU执行时候会转换成JVM指令执行步骤:分配内存给这个对象初始化对象将初始化好的对象和内存地址建立关联,赋值用户初次访问使用Volatile可以保证这个执行顺序不会被修改
2021-11-05 20:21:13 126
原创 Java定义Logger为什么要用static和final?
private static final Logger logger= LoggerFactory.getLogger(ShiroConfig.class);(1)出于资源利用的考虑,Logger的构造方法参数是Class,决定了Logger是根据类的结构来进行区分日志,所以一个类只要一个Logger就可以了,故static(2)final表示一种编程习惯,表示该类的Logger只是记录该类的信息,否则日志会无法提供可以令人信服的记录定义成static final,logger变量不可变,读取速度快
2021-11-03 13:34:46 1781
原创 idea快捷键和使用技巧
idea快捷键和使用技巧搜索代码库 ctrl + N查看接口实现 ctrl + alt + B 或者点代码前边的绿色I自动生成get和set Alt+Insert 或者 右键Generate.自动生成代码.var 生成变量.null 判空.notnull 判非空.nn 盘非空.for 遍历.fori 带索引的遍历.not 取反.if 条件判断.cast 强制类型转换.return 返回值...
2021-10-24 19:07:11 112
原创 23种设计模式--解决程序发展过程中的变化,要找到稳定的部分和变化的部分才能引入设计模式
23种设计模式–解决程序发展过程中的变化,要找到稳定的部分和变化的部分才能引入设计模式单例模式 singleton参考:https://blog.csdn.net/wayne_lee_lwc/article/details/104228469?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-8.no_search_link&spm=1001.2101.3001.4242.8模
2021-10-24 19:06:30 2394
转载 深入剖析Java中的装箱和拆箱
深入剖析Java中的装箱和拆箱深入剖析Java中的装箱和拆箱自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。以下是本文的目录大纲:一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题若有不正之处,请谅解和批评指正,不胜感激。请尊重作者劳动成果,转载请标明原文链接:http://www.cnblogs.com/dolphin0520/
2021-10-07 14:43:50 147
原创 Vim/NeoVim工具说明
Vim/NeoVim工具说明使用nvim打开编辑器hjkl 方向键4j 向上跳4行w 下个单词词首 wordb 上个单词词首 begingg 回到文档最上方G 到文档最下方ctrl + u 向上翻页ctrl + d 向下翻页f 查找最近的字符find 例如fr 跳到后边最近的r处。 重复上次的操作y 复制yank(拉)例如 yaw 复制整个单词 y4j复制包含当前行向下的4行p 粘贴pastedfr 一直删到第一个r处I 从行首开始输入A 从行末尾开始输入caw
2021-09-24 22:47:42 858
原创 C语言指针详解
C语言指针详解前言这不是我第一次写关于C指针的文章了,只是因为指针对于C来说太重要,而且随着自己编程经历越多,对指针的理解越多,因此有了本文。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机硬件以及操作系统等方方面面的基本知识。所以我想通过一篇文章来尽可能的讲解指针,以对得起这个文章的标题吧。本文会持续更新。为什么需要指针?指针解决了一些编程中基本的问题。第一,指针的使用使得不同区域的代码可以轻易的共享内存数据。当然你也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,
2021-09-23 21:54:38 287
原创 Linuxs中常用的数据结构
Linuxs是单内核宏内核:把所有东西都集成到内核里,优点:高效 缺点:稳定性差微内核:内核中只有基本的调度,内存管理等,其他的都是作为用户态守护进程进行运行,模块化程度高,优点:超级稳定 可以kill掉驱动进程 缺点:效率低,进程间同喜消耗资源Linux是单内核结构:吸收了微内核的优点可以进行模块化设计,支持动态加载内核模块,同时吸收了宏内核的优点把关键模块集中在内核中比较高效Linux内核编程例子#include <linux/module.h>#include <
2021-09-15 21:21:36 686
原创 DFS深度优先搜索说明
DFS : Depth First Search 不撞南墙不回头Bachtracking和Depth First Search和Generate bit Mask的区别Bachtracking:使用的是DFS方法,目的是求问题的解,如果在DFS过程中发现不是问题的解那么久回溯到上一个节点DFS:遍历整个搜索空间不管是否是问题的解Generate bit Mask:是DFS的一种替代实现方法算法框架模板result = []def backtrac(路径,选择列表) if 满
2021-09-12 20:16:52 115
原创 Linux高速缓冲区介绍
Linux高速缓冲区用户和磁盘之间还隔着高速缓冲区高速缓冲区位置代码段 | tss段|高速缓冲区|用户内存高速缓冲区的管理要素:映射关系(内存与块设备磁盘之间的映射关系)应用程序与高速缓冲区的交互API磁盘与高速缓冲区的交互API高速缓冲区的管理系统(循环链表+哈希表+单链表)文件系统-高速缓冲区:首先我们为什么需要高速缓冲区而不是直接访问块设备中的数据。这是因为,IO设备和内存之间的读写速度不匹配而且有一点数据需要写入或者读出磁盘就访问磁盘,磁盘很快就会损坏,而高速缓冲
2021-09-08 23:44:37 676 1
原创 Linux文件系统盘片解析
Linux对于文件系统的支持层解析Linux中使用文件系统都分几个部分有关于Linux中高速缓冲区的管理程序 分页机制 每页4KB 每个程序不是所有页都读入高速缓冲区,如果执行中出现没有加入高速缓冲区的页,会触发缺页中断文件系统的底层通用函数(对于硬盘的读写 分配 释放等,对于目录的几点管理 inode 内存与磁盘的映射)对于文件数据进行读写操作模块(VFS:虚拟文件系统 硬件驱动和文件系统的关系 pipe 块设备的读取)文件系统与其他程序的接口实现(fopen 关闭
2021-09-08 23:26:57 138
原创 Linux文件系统运行流程解析
文件系统解析uboot启动的时候给内核传递了一个参数,是以tagglist进行的,需要内核进行解析内核启动文件系统后,文件系统的工作流程:参数的接收参数的解析参数的应用在整个文件系统中,都需要什么组件文件系统的初始化流程打开 /etc/inittab,解析初始化文件如果没有inittab,就创建一下参数传入的方法:用户根据自定义/etc/inittab配置文件,在init_main函数中进行了文件的读取,并且根据文件的每一项参数,创建init_action结构体节点
2021-09-08 22:28:33 198
原创 Linux文件系统概述
Linux 文件系统是磁盘管理的目录是linux中操作所有硬件设备的方式系统的功能机制学习作用:文件系统也叫应用程序,写应用程序的时候不仅要存在文件系统中并且还要使用文件系统中的诸多功能大多数嵌入式公司都在做文件系统,比如说 系统界面 系统的开机画面 系统ROM 系统的功能 预装的软件等等文件系统包含哪些重要部分标准库,glibc,OpenGL, media Framework配置文件 /etc/init.d/rcS 开机自运行程序 开机界面
2021-09-08 00:43:49 100
原创 Linux中的信号 SIGNAL
进程间通信常用以下几种方式信号信号量消息队列共享内存信号量(semaphore)和信号(signal)是完全不同的东西信号量:用来同步和互斥,PV操作,进程间通信用有名信号量,一个进程内通信用无名信号量信号:类似于DOS下的中断,Linux中有31必须要记住的通用信号,是一种简单的进程间通信的方式Linu信号SIGHUPSIGINTSIGQUITSIGILLSIGTRAPSIGPIPESIGCHLDSIGTTOU…什么是信号,有什么作用是一.
2021-09-07 23:56:15 182
原创 Linux中Kbuild makefile说明
Linux中Kbuild makefile说明obj-y +=xxx.o该模块编译到zImageobj-m +=xxx.o该模块不会编译到zImage但会生成一个独立的xxx.ko 静态编译(CONFIGTEST)是一个整体,(CONFIG_TEST) 是一个整体,(CONFIGTEST)是一个整体,(xxx)表示引用变量 xxx比如定义 CONFIG_TEST=y(CONFIGTEST)就是yobj−(CONFIG_TEST)就是y obj-(CONFIGTEST)就是yob
2021-09-07 22:39:26 562
原创 Linux 3.4内核启动流程
Linux 3.4内核启动流程内核如何进行多平台的适配,在内核中如何认识这些板子?内核启动的整体流程认识一种高效的编程结构(代码段,严格控制每一个对象每一个类的位置)内核启动时进入保护模式后首先运行的是head.s...
2021-09-07 20:07:15 119
原创 Linux 操作系统的引导
Linux 操作系统的引导Linux是如何从硬盘中读出的Linux在启动的时候是如何拿到硬件参数的Linux在初始运行中都做了什么由PC机的BIOS(0xFFFF0是BIOS存储的总线地址)把bootsect.s从固定地址(0x7c00)拿到内存中的某个固定地址(0x90000),并且进行了一系列的硬件初始化和参数设置bootsect.s磁盘引导块程序,在磁盘的第一个扇区中的程序(0磁道 0磁头 1扇区) 大小512字节 地址0x90000 - 0x90200作用:首先将后续的se
2021-09-06 22:43:18 92
原创 Linux系统的进程管理
系统的进程管理:系统的进程的运转方式系统时间:(jiffies 系统滴答)CPU内部有一个RTC(定时器),会在上电的时候调用mktime函数算出从1970年的1月1日0时开始到当前开机点所过的秒数 给mktime传递的参数是从rtc芯片中读出,转化为时间存入全局变量中,并且会为jiffies所用1个jiffies 系统滴答是10ms,每隔10ms会引发一个定时器中断,这个中断中进行以下操作:执行timer_interrupt进行了jiffies的自加call do_timer调
2021-09-06 00:05:41 85
原创 linux中断的那些事
源码在线查看网站:https://lxr.missinglinkelectronics.com/中断都有哪些:硬件的中断响应 ---->内核驱动中的中断系统调用的函数响应 (sys call)----->系统调用自定义中断 ---->软件的软中断模式信号中断(kill -signalnum) ---->信号和进程有很大的关系 了解信号的使用,创建等系统的异常和错误 —> 系统的异常获取 了解系统异常的作用Linux的中断机制硬件中断
2021-09-05 21:54:12 79
原创 用户态 ==> 内核态说明
用户态 ==> 内核态用户态申请外部资源时进入内核态的三种场景系统调用中断异常读写文件 open / read / write申请内存 malloc 1. brk 2. mmap 缺页中断(异常)系统调用分为:进程 exit fork文件 chmod chown openfopen 是库函数 open是系统调用 前者封装了后者设备 read write ioctl信息 getxxx
2021-09-05 20:05:54 74
原创 Arch Linux 内核非官方版本介绍
Arch Linux 内核非官方版本介绍:https://wiki.archlinux.org/title/Kernel#Major_patchsets
2021-09-03 00:54:16 251
原创 BFS 广度优先搜索说明
BFS = Breadth First Search 广度优先搜索用于:遍历树结构 level order遍历图结构 BFS,Topological遍历二位数组流程描述procedure BFS(G,V): create a queue Q enqueue V on Q makr V while Q is not empty: t <- Q.dequeue() if t is what we are looking for: return t fo
2021-09-03 00:49:20 98
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人