- 博客(38)
- 收藏
- 关注
原创 深入理解Java虚拟机--笔记
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-03-02 10:54:56
137
原创 重构-改善既有代码的设计 笔记
做任何提炼前,先移除局部变量。将重复的行为也搬移到函数。将原函数分解成一组嵌套的函数。应用拆分,分离计算逻辑与输出格式化逻辑。为计算器引入多态性来处理计算逻辑。好代码的检验标准就是人们是否能轻而易举地修改它。因此改进设计的一个重要方向就是,消除重复代码,确定所有事物和行为在代码中只表述一次。三次法则:第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做;第三次再做类似的事,你就应该重构。正如老话说的:事不过三,三则重构。我的项目计划上没有专门留给重构的时间,绝大多数.
2020-10-20 17:15:54
169
原创 MongoDB单条数据插入更新及批量数据插入更新
单条数据插入更新public void insertStubStatusRealTime(Map<String, Object> params) throws ParseException { String stubStatusTableName = "t_stub_status_realtime"; String stubId = (String) ...
2020-03-28 15:24:26
981
转载 TCP-三次握手和四次挥手简单理解
三次握手(three-way handshaking)1.背景:TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。2.原理:1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方。2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了。3)最后,发送方再回传一个带有ACK标志的数据...
2020-01-13 11:34:38
133
转载 为什么要用数据库连接池?
对于一个简单的数据库应用,由于对于数据库的访问不是很频繁。这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销。但是对于一个复杂的数据库应用,情况就完全不同了。频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。连接复用。通过建立一个数据库连接池以及一套连接使用管理策略,使得一个数据库连接可以得到高效、安全的复...
2020-01-13 11:18:14
542
转载 为什么说 HashMap 是非线程安全的?
我们在学习 HashMap 的时候,都知道 HashMap 是非线程安全的,同时我们知道 HashTable 是线程安全的,因为里面的方法使用了 synchronized 进行同步。但是 HashMap 为什么是非线程安全的呢?难道仅仅就是因为内部的方法没有 synchronized 关键字修饰吗?这篇文章主要来分析一下原因。我们知道 HashMap 底层是一个 Entry 数组,当发生 ha...
2020-01-13 11:08:11
267
转载 Dubbo理解
1.为什么要dubbo在互联网的发展过程中,在以前,我们只需要一个服务器,将程序全部打包好就可以,但是,随着流量的增大,常规的垂直应用架构已无法应对,所以,架构就发生了演变。1 单一应用架构2 应用和数据库单独部署3 应用和数据库集群部署4 数据库压力变大,读写分离5 使用缓存技术加快速度6 数据库分库分表7 应用分为不同的类型拆分发展到这个阶段的时候,我们发现,应用与应用之间的...
2020-01-10 10:54:18
164
转载 POJO JavaBean EJB区别
1.POJOPOJO(Plain Old Java Object)。POJO的内在含义是指那些:有一些private的参数作为对象的属性,然后针对每一个参数定义get和set方法访问的接口。没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。 public class User { private String name; privat...
2020-01-10 09:50:00
141
转载 MYSQL数据库四种索引类型的简单使用
MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述:(1)普通索引这是最基本的MySQL数据库索引,它没有任何限制。创建方式之一如下:CREATE INDEX indexName ON mytable(username(length));(2)唯一索引它与前面的普通索引类似,不同的就是:MySQL数据库索引列的值必须唯一,但允许有空值。如果...
2020-01-09 14:41:25
222
转载 spring的4种事务特性,5种隔离级别,7种传播行为
spring事务:什么是事务:事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.事务特性(4种):原子性 (atomicity):强调事务的不可分割.一致性 (consistency):事务的执行的前后数据的完整性保持一致.隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰持久性(durability) :事务一旦结束,数据就持...
2020-01-09 14:20:01
125
原创 JVM相关知识点小结
1.JVM的主要组成部分?及其作用?类加载器(ClassLoader)运行时数据区(Runtime Data Area)执行引擎(Execution Engine)本地库接口(Native Interface)组件的作用: 首先通过类加载器(ClassLoader)会把 Java 代码转换成字节码,运行时数据区(Runtime Data Area)再把字节码加载到内存中,而字节码文件...
2020-01-09 14:10:22
138
原创 Ajax和Jsonp
jsonpjsonp是用来解决Ajax直接请求普通文件存在跨域无权限访问的问题的,jsonp(json Protocol)该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。ajax和jsonp的区别1、ajax和jsonp的调用方式很像,目的...
2020-01-08 14:01:36
144
原创 get和post的区别
get和post的区别GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。get 请求会被浏览器主动缓存,而 post 不会。get 传递参数有大小限制(2KB),而 post 没有。post 参数传输更安全,get 的参数会明文限制在 url 上,post 不会。注意:GET产生一个TCP数据包;PO...
2020-01-08 13:54:20
81
原创 拦截器
拦截器与过滤器拦截器:拦截器是对调用的Action起作用,它提供了一种机制可以使开发者定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。很多业务逻辑都是靠拦截实现的,比如校验,验证登录权限(比如下载时跳转到登陆页面)等等。过滤器:过滤器是对整个的请求过程起作用!换句话说就是拦截器没有过滤器的范围广。过滤器是在java web中,你传入的request,re...
2020-01-08 13:33:20
108
原创 Session和Cookie
1.session 和 cookie 有什么区别?存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。容量和个数限制:cookie 有容量限制(4KB 一个cookie),每个站点下的 cookie 也有个数限制(50)。存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序...
2020-01-08 11:37:40
110
原创 JSP相关知识点小结
1.JSP 和 servlet 有什么区别?JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式。servlet 和 JSP 最主要的不同点在于:servlet的应用逻辑是在 Java 文件中,并且完全从表示层中的 html 里分离开来,而JSP的情况是Java和html可以组合成一个扩展名为 JSP 的文件。JSP 侧重于视图,servlet主要用于控制逻辑。...
2020-01-08 11:35:09
120
原创 java反射知识点小结
1.反射正射:直接对这个类进行实例化,之后使用这个类对象进行操作。 Phone phone = new Phone(); //直接初始化,「正射」 phone.setPrice(4);反射:一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。 Class clz = Class.forName("com.xxp.reflect.Phone"); Met...
2020-01-08 11:14:03
156
原创 Java容器知识点小结
Java容器分为 Collection 和 Map 两大类,其下又有很多子类,如下所示:CollectionList ArrayList LinkedList Vector StackSet HashSet LinkedHashSet TreeSet MapHashMap LinkedHashMapTreeMapCon...
2020-01-08 10:47:07
160
原创 BIO、NIO、AIO的区别
BIO、NIO、AIO的区别BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的优点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很低,容易成为应用性能瓶颈。NIO 是 Java 1.4 引入的 java.nio 包,提供了 Chann...
2020-01-08 10:30:28
80
原创 同步与异步 阻塞与非阻塞
阻塞和非阻塞 同步和异步同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可...
2020-01-08 10:25:18
66
原创 接口和抽象类
接口和类(1)java之所以引入接口,就是为了弥补不能多继承的缺点,在java中每个类只能有一个超类,但却可以实现多个接口。(2)接口的思想不允许出现变量,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。(3)接口可以有静态常量,并且这个常量一定是静...
2020-01-08 10:01:28
95
原创 String StringBuffer StringBuilder
Java 中操作字符串都有哪些类?它们之间有什么区别?操作字符串的类有:String、StringBuffer、StringBuilder。String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。StringBuffer、StringBuilde...
2020-01-08 09:41:01
209
原创 HashMap HashSet ConcurrentHashMap相关知识点小结
1.HashMap的底层实现原理HashMap通过put()和get()方法存值和取值。存值时,通过hashcode()方法计算键的hashcode值,然后找到对应的bucket位置来存储键值对,如果两个键值对的键的hashcode值相同,则调用键对象的equals()方法来判断两个键对象是否相同,若相同,新值替换旧值并返回旧值(例:原先(16,21),现put(16,22)则22替换21并返...
2020-01-08 09:33:09
179
原创 Java设计模式
Java设计模式:简单工厂模式、工厂方法模式、抽象工厂模式、代理模式、单例模式(持续更新中……)0.简单工厂模式举例:生产电脑,分为hp电脑和lenovo电脑简单工厂模式分为三种:01.普通 //创建两个电脑的共同接口 public interface Computer{ public void create(); } //创建两个实现类 public class HpCo...
2020-01-07 22:33:54
118
原创 SpringCloud知识点小结
1. 什么是 spring cloud?spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。2. spring cloud 断路器的作用是什么?在分布式架构中,断路器模式的作用也是类似...
2020-01-07 21:55:55
109
原创 SpringBoot知识点小结
1. 什么是 spring boot?spring boot 是为 spring 服务的,是用来简化新 spring 应用的初始搭建以及开发过程的。2. 为什么要用 spring boot?配置简单独立运行自动装配无代码生成和 xml 配置提供应用监控易上手提升开发效率3. spring boot 核心配置文件是什么?spring boot 核心的两个配置文件:appl...
2020-01-07 21:52:36
110
原创 Spring与SpringBoot的启动流程
Spring的启动流程Spring的启动过程,就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程,在web应用中,web容器会提供一个全局的ServletContext上下文环境,ServletContext上下文为Spring IoC提供了一个宿主环境。spring的启动是在servlet容器之上的,所有web工程的初始位置就是web.xml,它配置了serv...
2020-01-07 21:21:54
722
原创 SpringMVC与Struts2处理请求的流程
SpringMVC处理请求的流程:(1)用户发送请求至前端控制器DispatcherServlet;(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;(4)DispatcherSe...
2020-01-07 16:15:28
590
转载 SpringMVC知识点小结
1、什么是Spring MVC ?简单介绍下你对springMVC的理解?Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。2、SpringMVC的流程?(1)用户发送请求至前端控制器...
2020-01-07 15:48:51
171
转载 注解原理
注解本质是一个继承了Annotation的特殊接口。一个注解准确意义上来说,只不过是一种特殊的注释而已,如果没有解析它的代码,它可能连注释都不如。而解析一个类或者方法的注解往往有两种形式,一种是编译期直接的扫描,一种是运行期反射。编译期的扫描指的是编译器在对 java 代码编译字节码的过程中会检测到某个类或者方法被一些注解修饰,这时它就会对于这些注解进行某些处理。典型的就是注解 @Ove...
2020-01-07 15:46:31
988
转载 Spring知识点小结
1.Spring是什么?Spring是一个轻量级的IoC和AOP容器框架。目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。常见的配置方式有三种:基于XML的配置、基于注解的配置、基于Java的配置。主要由以下几个模块组成:Spring Core:核心类库,提供IOC服务;Spring AOP:AOP服务;Spring Context:提供框架式的Bean访问方式;S...
2020-01-07 11:19:31
215
原创 Spring IOC的五种注入方式
Spring的IOC有五种注入方式:构造器注入、setter方法注入、静态工厂注入、实例工厂注入、根据注解注入。对上述分类可分为两种:xml配置声明注册:setter注入、构造器注入、静态工厂注入、实例工厂注入;注解方式声明注册:注解方式注入1.构造器注入:在applicationContext.xml配置文件中注册UserService,将UserDaoJdbc通过construc...
2020-01-05 23:27:20
4632
原创 Java多线程及Synchronized知识点小结
一、线程1.线程和进程一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。2.守护线程是什么?守护线程是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。在 Java 中垃圾回收线程就是特殊的守护线程。3.线程的状态NEW 尚未启动RUNNABLE 正在执行中BLOCKED 阻塞的(被同步锁...
2020-01-03 14:33:35
170
转载 java中classpath路径详解
总结:1、在编译生成的文件.classpath 中kind=“src” 的类型为classpath 路径,在项目里可以用classpath:xxx方式引用。也可以手动过来自己添加、扩大classpath的范围,<classpathentry kind="src" path="XXX"/>.也就是说你想知道classpath指的是哪里点开.classpath 看看kind=“src”...
2020-01-01 15:08:41
204
转载 Spring的两种动态代理:Jdk和Cglib
JDK:java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。Cglib:而cglib动态代理是利用asm开源包,将代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。区别:(1)JDK动态代理只能对实现了接口的类生成代理,而不能针对类(2)CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 ...
2019-12-25 11:19:42
138
原创 动态代理
动态代理与静态代理区别1.代理类在程序运行时根据我们在java代码中的“指示”创建代理的方式被称为动态代理。而静态代理在程序编译的时候就已经将接口,被代理类,代理类确定下来了。2.相比与静态代理,动态代理的优势在于可以很方便的对代理类的函数进行统一的处理,而不用说修改每个代理类中的方法。比如说:在静态代理中,班长帮学生交学费,静态代理中有giveMoney()方法,里面调用的是stu.gi...
2019-12-25 11:15:55
86
转载 java程序编译和运行
java程序编译和运行编译:XXX.java --> XXX.class。编译时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类。 编译后的字节码文件主要分成两部分:常量池和方法字节码。 运行:分两个过程:类的加载和类的执行 JVM在程序第一次主动使用类的时候,才加载该类。所以,jvm并不是在一开始就把一个程序所有的类都加载到内存(...
2019-12-25 10:25:36
84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人