- 博客(140)
- 资源 (22)
- 收藏
- 关注
原创 Springboot @Import @Configuration、@ComponentScan、@Component注解 解析过程
springboot spring @Import解析过程
2022-10-30 22:53:37 339
原创 TOP命令详解
下面逐个介绍各个参数的含义1. 系统运行和负载信息这些字段信息分别是:当前时间、系统已经运行的时间、当前登录用户的数量、最近5、10和15分钟内的平均负载load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。2. 任务信息Tasks表示有多少个进程,上面表示共有119个进程,1个在运行,118个在休眠,0个是停止状态,0个是僵尸状态3. CPU状态us, use
2020-08-17 08:20:38 687
转载 mysql一次性删除千万调记录的方案
临时需求,因为数据库一张表的数据量已经在4000万条,现在需要删除无用数据,大约3000万条,执行一晚上后早上一看,mysql报错提示磁盘空间不足,怀疑是日志引起,于是百度....可行方案:先建立一个旧表和新表结构一样CREATETABLE 新表 SELECT*FROM 旧表 WHERE1=2;//筛选条件是选不出数据的然后导入自己不需要删除的数据INSERTINTO 新表 SELECT*FROM旧表WHERE 查询条件然后就可以干掉旧表或者把新表数据倒回去了转...
2020-08-05 19:23:38 595
原创 list通过stream转map报错
如下图所示,在做组装map的时候报错了。原因就是因为组装的键值对有为null的原因,虽然hashmap允许key和value都为null。
2020-06-22 23:20:00 576
原创 java.lang.UnsupportedOperationException 原因解析
List list = Collections.singletonList("1"); list.remove("1"); //报错 java.lang.UnsupportedOperationException list.add("2"); //报错 java.lang.UnsupportedOperationExceptionString[] ordinaryArray = {"11", "22", "33"};List list = Arrays.asList(ordinaryArra..
2020-06-22 23:00:35 334
原创 HashSet--JDK1.8源码分析
关于HashMap的源码解读,可参考https://blog.csdn.net/jiang_zf/article/details/104532186一、一些变量介绍 //用来存储元素,从这里也可以看出来,hashset内部是以hashmap实现的 private transient HashMap<E,Object> map; //定义一个常量,在向m...
2020-03-01 10:26:49 190
原创 Hashtable--JDK1.8源码分析
一、一些变量介绍 //存储键值对的数组 private transient Entry<K,V>[] table; //键值对总数 private transient int count; //容量的阈值,超过此容量将会扩容。 private int threshold; //负载因子 p...
2020-02-29 18:24:24 134
原创 LinkedHashMap--JDK1.8源码分析
LinkedHashMap继承自HashMap,很多操作都是跟HashMap一样,对于一样的地方就不再介绍,详细可参考HashMap - - JDK1.8 源码分析 ,下面主要介绍一下不同的地方。数据结构首先列出几个需要知晓的实例变量含义:final boolean accessOrder;//该变量表示是否需要按照读取顺序排序;true为是,false为否,当为false...
2020-02-29 16:24:36 157
转载 类加载机制
一.目标:1.什么是类的加载?2.类的生命周期?3.类加载器是什么?4.双亲委派机制是什么?二.原理 (类的加载过程及其最终产品):JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数据的访问入口。三.过程...
2020-02-28 21:30:32 123
原创 HashMap - - JDK1.8 源码分析
一、 默认常量static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认数组长度16static final int MAXIMUM_CAPACITY = 1 << 30; // 最大数组容量2^30(为什么不能是2^31,因为2^31意味着需要占用32位,而最高位一般标识正负状态值)static final...
2020-02-27 16:12:05 126
转载 虚拟机nat模式网络配置
一、vm中虚拟网络编辑器中需要确认以及设置的有1、子网编码:保证和网关在同一个网段(红色部分为网段)且不与网关ip重复,我设置的192.168.0.02、子网掩码:一般是固定的255.255.255.03、网关:自己随便设置的一个(一般以0或者1结尾)如我这边设置的是192.168.0.1 设置的net模式中的NAT设置保证里面用的网关是192.168.0.1另外如果有设置DH...
2020-02-12 16:20:05 860
转载 BeanFactoryPostProcessor和BeanPostProcessor
Spring提供了两种PostProcessor(后置处理)bean的扩展接口,分别为BeanPostProcessor和BeanFactoryPostProcessor1.BeanFactoryPostProcessor:是针对于beanFactory的扩展点,即spring会在beanFactory初始化之后,beanDefinition都已经loaded,但是bean还未创建前进行调用...
2020-01-15 14:13:28 225
转载 Spring的循环依赖问题
能够解决循环依赖的情况主bean通过属性或者setter方法注入所依赖的bean,所依赖的bean也通过属性或者setter方法注入主bean; 主bean通过属性或者setter方法注入所依赖的bean,所依赖的bean通过构造函数注入主bean。无法解决的循环依赖问题 主bean对象和所依赖的bean对象,双方之间都通过构造函数注入对方。 在主bean中通过构造函数注入...
2020-01-14 17:17:44 226
原创 几种装配bean注解的区别
@Autowired:该注解可以对类成员变量,方法和构造方法进行标注,完成自动装配的工作,通过使用@Autowired 来消除setter和getting方法。默认按照bean的类型进行注解;如果想按照名称来转配注入,则需要结合@Qualifier一起使用@Resource:该注解与@Autowired的功能一样,区别在于该注解默认是按照名称来进行装配注入的,找不到与名称匹配的bean时才会...
2020-01-13 18:02:10 565
原创 maven-resources-plugin插件使用
maven-resources-plugin主要是将项目中的资源文件编译、打包;注意,资源文件不是源代码,一般是环境的配置文件,默认存在src/main/resources和src/test/resources中。maven-resources-plugin的三个目标(goal):resources:resources:用来将目录中的资源文件src/main/resources拷贝到编译目...
2019-12-08 11:16:08 3098
转载 maven-compiler-plugin 插件详解
转自:https://blog.csdn.net/liupeifeng3514/article/details/80236077maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。maven的默认编译使用的jdk版本貌似...
2019-12-08 10:46:20 355
原创 XSS漏洞和CSRF问题
可参考https://www.cnblogs.com/itsuibi/p/10752868.html,言简意赅XSS漏洞定义:XSS是跨站脚本攻击,属于被动式的攻击。XSS指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。可能造成的危害:网站弹框(刷流量);网站挂马;会话劫持;cookie盗...
2019-11-27 20:21:38 653
原创 Netty学习10-Netty的socket攻击及预防
在前面的文章我们说到过,可以采用长度+数据的格式定义包结构;但是如果长度定义的特别大,那么缓冲区必然会存储不下,而引起宕机或其他问题。这便是一种socket攻击。除此之外,如果定义的长度和实际长度不匹配,比如实际长度为5,定义的长度为6,那么读取的时候可能会把下一个数据包的一部分读取到,造成以后的数据不能正常解析;这也是一种socket攻击。可以通过以下几个方面处理socket攻击:1...
2019-11-26 19:51:24 1655 1
原创 建造者模式
当一个对象的构造过程比较复杂,或者需要介入到具体的构造过程,比如构造的顺序或者构造的部件选择(有些不需要全部部件都完全初始化)等;可以考虑使用建造者模式;建造者模式和工厂模式的区别是:建造者模式关心构建过程,代码体现是调用多个具体的属性初始化方法,最后返回初始化好的对象;而工厂模式一般不关系对象的具体创建过程,代码体现一般都是直接new一个产品对象;另外如果一个对象属性较多,且使用的时候不一定...
2019-11-26 11:21:58 82
原创 Netty学习09-粘包和分包及FrameDecoder源码解析
粘包出现的原因:服务端与客户端没有约定好要使用的数据结构。Socket Client实际是将数据包发送到一个缓存buffer中,通过buffer刷到数据链路层。因服务端接收数据包时,不能断定数据包1何时结束,就有可能出现数据包2的部分数据结合数据包1发送出去,导致服务器读取数据包1时包含了数据包2的数据。这种现象称为粘包。分包:数据包数据被分开一部分发送出去,服务端一次读取数据时可能读取到完整数...
2019-11-25 20:53:03 296
原创 Netty学习08-netty消息在管道中流转分析
我在前面的文章中写到,给消息添加各种处理事件,但是这些处理事件是如何关联起来,做到都能够执行,而且会先执行上行的处理方法,然后处理下行的处理方法的。本文基于netty-3.10.5.Final源码做一个简单的分析。前面《netty学习04-编写一个简单NIO系统》我们已经分析过服务的启动过程,我们知道在服务启动后,AbstractNioWorker会调用AbstractNioSelecto...
2019-11-24 17:17:13 333
原创 Netty学习07-protobuf序列化学习
Protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。Protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。protobuf协议是以一个 .proto 后缀的文件为基础,这个文件描述了存在哪...
2019-11-24 12:06:00 190
原创 Netty学习06-用Netty3和Netty5分别写一个心跳处理实例
心跳机制的意义:TCP空闲的时候是不会发送任何数据包。也就是说,当一个TCP的socket,客户端与服务端谁也不发送数据,会一直保持着连接。这其中如果有一方异常掉线(例如死机、路由被破坏、防火墙切断连接等),另一端如果没有发送数据,永远也不可能知道。这对于一些服务型的程序来说,是灾难性的后果,将会导致服务端socket资源耗尽。 所以为了保证连接的有效性、及时有效地检测到一方的非正常...
2019-11-24 11:16:57 147
原创 Netty学习05-用Netty5写一个简单的服务端和客户端
前面文章讲了如何通过Netty3写一个简单的例子,但是Netty4和Netty5同Netty3有很大的不同,这篇文章简单介绍下如何通过Netty5写一个简单的服务端和客户端例子。服务端1. 初始化一个NIO辅助服务类 //NIO服务的辅助启动类 ServerBootstrap bootstrap = new ServerBootstrap();2. ...
2019-11-17 15:39:18 193
原创 netty学习04-编写一个简单NIO系统
如果要提高NIO的工作效率可以通过两个方面入手:1.一个系统注册多个selector2.一个selector可以注册多个ServerSocketChannel业务代码的实现流程如图所示,详细解释和代码可查看附件:...
2019-11-05 19:31:37 130
原创 netty学习03-Netty客户端和服务端结合
在netty学习02-Netty初步学习-HelloNetty中已经学习了如何搭建netty服务端,下面介绍下如何搭建netty客户端。netty客户端搭建的流程和服务端类似,很多地方都是把Server缓冲Client即可。1.创建客户端服务类ClientBootstrap bootstrap=new ClientBootstrap();2.创建监听和消息接发的线程池Exe...
2019-11-03 16:46:33 197
原创 netty学习02-Netty初步学习-HelloNetty
创建Netty服务端的几个步骤:1.创建服务类ServerBootstrap bootstrap=new ServerBootstrap();2.创建监听端口线程和数据读写线程ExecutorService boss= Executors.newCachedThreadPool();ExecutorService worker=Executors.newCachedThrea...
2019-11-03 15:48:08 383
原创 netty学习01-传统IO和NIO的比较
传统IO的特点有两个阻塞点:1. server.accept();接收连接2.InputStream.read(bytes);读取数据单线程下只能有一个客户端连接,用线程池可以解决单个客户端连接的问题,但是太消耗性能。NIO的特点NIO是非阻塞的传统IO在通道中读取数据的时候,如果没有数据,会一直等待;而NIO(非阻塞IO)则会实时返回。NIO可以单线程处理多客户端...
2019-10-31 20:46:38 107
原创 享元模式
享元模式UML图一句话概括享元模式:为了节省内存空间,将对象分为不可变的内部状态对象和可变的外部状态对象;每次在使用的时候,如果内部状态对象已经存在则复用,否则新建保存。享元工厂负责存储享元对象的Map。...
2019-10-31 19:38:50 112
原创 代理模式
代理模式UML图使用代理模式的好处:1.职责清晰,被代理的真是对象不用关心额外的业务2.可扩展性强使用代理模式几个步骤:1.创建代理处理类2.创建代理对象3.通过代理对象调用相关方法...
2019-10-31 19:20:28 102
原创 状态模式
状态模式UML类图:状态模式就是有一个上下文,然后上下文通过处理一些通用的逻辑之后,对于不同的状态的相关逻辑交给相关的实现类去实现,并且内部可以实现状态转换。遵循了单一职责原则和开放封闭原则。状态模式和策略模式类图基本差不多,区别就是状态模式存在状态间的切换,而策略模式不存在。...
2019-10-31 19:12:46 453
原创 jdk动态代理简析
本文是根据所学对jdk动态代理做一个简单的源码分析,更深层次的源码可参考其他博主的文章。先来一个简单的动态代理的例子。//接口public interface IBank { /** * 查询账户信息 */ public void queryInfo();}//实现类public class BankImpl implements IBank...
2019-10-30 19:58:15 125
原创 简单工厂模式与工厂方法模式和抽象工厂模式
1. 简单工厂模式2. 工厂方法模式3. 抽象工厂模式概括三种模式:简单工厂模式:去除了与具体产品的依赖。但是当需求变动的时候,需要对原有的类进行修改,违背了开放封闭原则。工厂方法模式:工厂方法克服了简单工厂违背的开放封闭原则的缺点,又保持了封装对象创建过程的优点。抽象工厂模式:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类...
2019-10-28 19:28:58 164
转载 直接插入排序
转自:http://c.biancheng.net/view/931.html直接插入排序的基本思想是:将 n 个有序数存放在数组 a 中,要插入的数为 x,首先确定 x 插在数组中的位置 p,然后将 p 之后的元素都向后移一个位置,空出 a(p),将 x 放入 a(p),这样可实现插入 x 后仍然有序。代码如下:public static void main(String[] ar...
2019-07-28 17:41:19 81
转载 选择排序
转自:http://c.biancheng.net/view/930.html假设当前存在一个 int 类型的数组 number,该数组中的元素依次是 13、15、 24、99、4 和 1。如果使用冒泡排序进行两两相邻比较,第一趟排序后的结果如下:13、15、24、4、1、99第二趟排序后的结果如下:13、15、4、1、24、99第三趟排序后的结果如下:13、4、...
2019-07-28 17:21:27 82
转载 快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。快速排序的基本思想是:通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此使整个数据变成有序序列。具体做法是:假设要对某个数组进行排序,首先需要任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放...
2019-07-28 17:13:05 136
原创 冒泡排序
冒泡排序(Bubble Sort)是常用的数组排序算法之一,它以简洁的思想与实现方法而备受青睐,也是广大学习者最先接触的一种排序算法。冒泡排序的基本思想是:对比相邻的元素值,如果满足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面(也就是交换两个元素的位置),这样数组元素就像气泡一样从底部上升到顶部。冒泡排序的算法比较简单,排序的结果稳定,但时间效率不太高。Java...
2019-07-28 16:46:24 100
原创 正则表达式常用的元字符
正则表达式常用的元字符 元字符 正则表达式的写法 说明 . "." 代表任意一个字符 \d "\\d" 代表 0~9 的任何一个数字 \D "\\D" 代表任何一个非数字字符 \s "\\s" 代表空白字符,如"\t’’和’’\n” \S "\\S" 代表非空白字符 \W "\\W" 代表...
2019-06-29 16:46:08 639
用Netty5写一个简单的服务端和客户端.rar
2019-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人