- 博客(34)
- 收藏
- 关注
原创 线程池执行流程
1.提交一个任务后,当线程池中存活的线程数小于核心线程数(corePoolSize)线程池就会创建一个核心线程来处理提交的任务。2.如果当前线程数大于或等于核心线程数会将任务放入任务队列中,等待被核心线程执行。3.如果任务队列也被放满就会创建非核心线程。4.如果最大线程数也满了,就会采用拒绝策略。
2022-11-07 19:30:10
1014
原创 线程的基本状态有那些?
WAITING:等待状态,表示线程进入等待状态,需要其他线程通知才能重新进去运行态。RUNNABLE:(可)运行态,表示当前线程处于运行或者就绪(可运行)TIME_WAITING:超时等待状态,到达时间自动返回。NEW:初始态,线程被构建,但还没有调用start()TERMINATED:终止态:表示当前线程已经执行完毕。BLOCKED:阻塞态,表示当前线程阻塞。
2022-11-04 17:43:30
218
原创 TCP粘包
总结:粘包就是由于TCP是面向流的传输协议,发送和接受都是不定长度,这种传输方式是无保护数据边界的从而造成粘包。解决办法:1.用开始符和结束符规定好每条数据的长度。2.设置长度,发送时在数据前几位明确此条数据的长度。2.发送方需要等待缓冲区flush时发送数据,造成发送时粘包。假设接受方粘包:通过优化程序逻辑等,接受方粘包是最难解决的,有时候甚至无法优化。产生原因:1.接受方未能及时接受缓冲去的数据,多包一起接受,造成接受时粘包。假设发送方粘包:不等缓冲区满就立即发送数据,但是这种方式会降低通行传输速率。
2022-11-04 14:32:03
454
原创 sleep和wait方法区别和共同点
wait方法调用后,线程不会自动苏醒,需要别的线程调用一个对象上的notify或者notifyAll,sleep方法执行后会自动苏醒,或者可以使用wait(long timeout)方法后会自动苏醒。其他区别:wait用于线程交互/通信,sleep通常用于暂停执行。两者最主要的区别:sleep不释放锁,wait释放锁。共同点:两个方法都可以暂停线程执行。
2022-11-03 10:18:05
265
原创 线程池核心参数
有:ArrayBlockingQueue(基于数组的阻塞队列) LinkedBlockingQueue(基于链表的阻塞队列) DelayedWorkQueue(基于堆的阻塞队列) PriorityBlockingQueue(可用compator或者comparaable实现排序的队列) SynchronousQueue(同步队列,不存数据直接启用非核心线程)核心线程数,创建线程的数量不大于核心线程数则不会被销毁。拒绝策略,当最大线程数用尽时会使用拒绝策略。最大线程数(包括核心线程数)
2022-11-02 19:30:01
321
原创 创建线程的四种方法
方式三:实现java.util.concurrent.Callable接口,允许子线程返回结果、抛出异常,重写call()方法。4.通过线程池创建线程,在前面的几种方法中线程时不可复用的,而线程池可以多次使用。方法一:继承 Java.lang.Thread类,重写run方法。方法二:实现Runnable接口,重写run()方法。
2022-11-02 19:07:48
137
原创 UDP和TCP的区别
UDP是无连接以数据包的形式发送数据,可以一对一,一对多,多对多,具有广播的功能。三次握手四次挥手,重传机制,流量控制,拥塞避免,这些都保证的了TCP的可靠性。拥塞避免:报文段指数增加到达门限值后每次只增加一个报文段,如果出现超时会将门限降至现有的一半然后每次只增加一个报文段(执行快恢复)3.TCP相比UDP来说效率低,因为TCP有复杂的建立和释放连接的操作(三次握手四次挥手)和复杂的首部格式。重传机制:依靠快速重传,超时重传,SACK方法来实现重传机制;拥塞控制:慢开始,拥塞避免,快重传,快恢复。
2022-10-31 16:39:29
629
原创 Mybatis三种分页方式
SELECT * FROM 表名 LIMIT A,B //第一个参数A是从第几条开始显示,第二个参数为显示几条数据(是最基本的分页方式,也是数据库原始的分页方式)
2022-10-24 20:00:47
355
原创 数据库索引建立和优化的原则
2.为经常需要排序(ORDER BY),分组(GROUP BY),联合(UNION),去重(DISTINCT)操作的字段建立索引。5.如果整张表的数据量比较小可以考虑不建立索引,因为建立索引也许需要占一定的内存空间,同时索引的维护也需要时间。8.限制索引的数目,索引并不是越多越好,因为索引也是会占据磁盘空间,在修改表内容的时候索引也必须更新维护。1根据列的散列性创建索引,因为散列度越高,索引最终的范围就越小,最终扫描的行数就越小,索引效率也就越高。6.如果索引字段的值很长,最好只检索前面若干字符。
2022-10-22 23:39:00
146
原创 数据库索引为什么失效
例如:SELECT name FROM nametable WHERE name LIKE'%三'/LIKE'%三%'(索引失效)SELECT name_id,name,address FROM nametable(组合索引有效)SELECT name_id,name,address FROM nametable(组合索引有效)SELECT name_id,name FROM nametable(组合索引有效)SELECT name_id FROM nametable(组合索引有效)
2022-10-22 23:16:55
503
原创 项目中使用MD5,AES和不用框架使用MD5,AES的区别
什么时候会用到MD5?什么是MD5算法?怎么实现MD5?什么是AES?怎么实现AES加密和解密?几种基本的对称加密算法。PCBC(Propagating cipher-block chaining)填充密码块链接:使密文中的微小更改在解密时导致明文大部分错误的模式,并在加密的时候也具有同样的特性。
2022-10-19 19:38:12
233
原创 介绍Mongdb,Mongdb基本的增删改查以及用Java对其操作
什么是mongdb?MongDB与sql中大致对应关系,MongDB的优缺点以及应用场景,mongdb的基本操作,用Java对MongDB操作
2022-10-07 23:38:25
565
原创 一级缓存和二级缓存在Mybaits和操作系统中分别指什么
在操作系统和Mybaits都有一级缓存和二级缓存的概念,而它们两个的含义却大有不同,今天将他们做简单的区分。什么是mybatis中缓存(cache)?eviction:代表的是缓存回收策略,MyBatis中有四种策略将Mybaits中一级缓存和二级的不同点阐述总结共有四点。mybaits二级缓存因为是定时清空的所以有可能读脏数据,使用的条件比较苛刻,现实应用场景已经十分少见,特别是分布式环境极大可能读取到错误的数据。可以引用redis等第三方内存库作为mybatis的缓存。
2022-09-17 20:49:44
942
原创 sql语句基本语法
SELECT * FROM 表名1 CROSS JOIN 表名2 WHERE 表名1 .表名1中某字段 = 表名2.表名2中某字段。SELECT 字段名 FROM 表1 INNER JOIN 表2 ON子句 表1.表1中某个字段=表2中某个字段。SELECT 字段名1,字段名2 FROM 表 1, 表 2 WHERE 判断语句。SELECT 字段名 FROM 表1 RIGHT OUTER JOIN 表2。关键字连接两个表,并使用 ON 子句来设置连接条件。关键字连接两个表,并使用 ON 来设置连接条件。
2022-09-13 07:39:53
264
原创 Hashmap底层存储机制和调用put()方法的过程
数组,链表,红黑树并不是随着hashmap对象创建而生成的(如果调用有参构造方法指定初始容量会有数组,调用有参构造大部分也不是按自己所填的参数产生容量的,而是按照2的次方进行扩容,比如有参构造为7,实际扩容为2的3次方)。...
2022-08-15 08:18:51
222
原创 基于Java的对称加密算法和非对称加密算法
A将对称加密算法中的某种算法(例如AES)再次进行加密(例如RSA)并发给B,B用RSA解密再用AES。填充在分组密码中,当数据长度不符合分组长度时,需要按一定的方式,将尾部明文分组进行填充,这种将尾部分组数据填满的方法称为。电子密码本模式是最简单的块密码加密模式,加密前根据加密块大小分成几块,之后将每块使用相同的密钥单独加密。填充密码块链接使密文中的微小更改在解密时导致明文大部分错误的模式,并在加密的时候也具有同样的特性。不填充,规定了明文的长度必须是加密算法分组长度的整数倍。...
2022-07-24 22:30:50
1568
原创 用Java实现常见的哈希算法
Hmac算法是配合其他hash算法一起去使用的,例如将Hmac算法和MD5一起使用,对应的就是HmacMD5算法,会产生一个64字节的key混入MD5中,使之更安全。哈希算法最重要的特点就是输入相同的值经过hash算法一定获得相同的输出,输入不同的值经过hash算法大概率得到不同的值(有概率哈希碰撞产生相同的值)。hash算法又称摘要算法,它的作用是对任意一组输入的数据进行计算,得到一个长度固定的输出算法。哈希算法的目的检验元数据是否被篡改。...
2022-07-24 20:57:32
2817
原创 关于重载与重写
重写(override):在继承中,子类对父类某个方法重新定义,且方法名参数值完全相同只改方法体内的代码称为重写(override)。2、重载改变参数值而重写不改变参数值。System.out.println("你好"+age+"岁"+name);System.out.println("你好"+name);重载与重写的不同:1、重载在同一个类中,而重写用在不同类(须有继承关系)中。System.out.println("你好");这种方法名相同但参数不同的方法称为方法重载(overload)
2022-02-16 19:52:13
155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人