- 博客(185)
- 资源 (4)
- 收藏
- 关注

原创 线程池是否需要关闭的问题测试
1.不关闭 static AtomicInteger integer = new AtomicInteger(0); static ExecutorService es; private static void execute(){ es = Executors.newFixedThreadPool(3); es.execute(() -> { integer.getAndAdd(1); Sys
2021-06-19 10:54:46
1429
4

原创 variable used in lambda expression should be final or effectively final 报错解决
public static void main(String[] args) { List<String> numList = Arrays.asList("1", "2", "3"); Holder holder = new Holder(0); int i = 0; numList.forEach(e -> { if("1".equals(e)){ i...
2021-06-11 11:27:14
2038
4

原创 互联网公司计算机网络热门面试题整理
1.体系结构OSI七层体系机构:物理层 数据链路层 网络层 运输层 会话层 表示层 应用层五层体系结构:物理层 数据链路层 网络层 传输层 应用层数据传输的基本单位:传输层(TCP(报文段)UDP(用户数据包))、网络层(IP数据报或分组)、数据链路层(帧)、物理层(比特)2.HTTP协议相关1)HTTP是不保存状态的协议:HTTP是一种不保存状态的协议,即无...
2018-07-07 22:03:24
5767

原创 Java中线程安全的加一(+1)操作的三种方式
1.锁分为乐观锁和悲观锁,悲观锁总是假设每次的临界区操作会产生冲突,如果多个线程同时需要访问临界区资源,就宁可牺牲性能让线程进行等待。而乐观锁,它会假设对资源的访问都是没有冲突的,所有的线程都可以在不停顿的状态下持续执行,如果遇到冲突,乐观锁采用的叫做比较交换(CAS Compare And Swap)来鉴别线程冲突,一旦检测到冲突产生,就尝试当前操作直到没有冲突为止 。2.锁的必要性:引...
2018-07-07 21:18:50
8873
2

原创 Java中的join方法原理详解
1.synchronized中的对象锁是线程的实例我们可以使用同步语句块的方式对需要同步的代码进行包裹。Object obj = new Object();synchronized(obj){ obj.wait(); //线程在这里等待}此时线程会在obj.wait()处等待,如果想继续执行,此时需要别的线程通过notify、notifyAll唤醒或者中断。但是如果o...
2018-07-04 16:17:46
10299
15

原创 兔子繁殖问题采用递归和循环两种方式
兔子繁殖问题:题目描述有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?输入描述:输入int型表示month输出描述:输出兔子总数int型基本思路:这是一个递归问题,从第一个月开始每个月兔子的数目为:1,1,2,3,5,8,13........,可以看出从第三个月开始,每个月兔子的数目是前两个月兔子的数目的和,用数学...
2018-03-11 19:42:25
10318
原创 1.数据库相关知识点整理
数据库相关:mysql执行计划记录:ref:返回匹配的某个单独值值的所有行range:检索指定范围的行index:遍历了索引树敖丙——数据库索引整理敖丙——数据库调优分库分表mysql语句加锁分析mysql锁sql注入sql防注入数据库锁数据库优化规范mysql日志MySql保证数据不丢失:https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933461&idx
2023-06-28 22:57:22
734
原创 linux下生成ssh密钥并获取密钥
生成密钥ssh-keygen -t rsa -f ~/.ssh/id_rsa -N '密码' -t指定密钥产生算法 -f指定生成文件,登陆是使用ssh命令进行的,而他的配置文件默认的私钥为家目录下.ssh/id_rsa -N对私钥加密以防止私钥泄露后他人乱用,但这也使得以后每次登陆必须输入-N指定的密码。https://blog.youkuaiyun.com/nahancy/articl...
2022-10-25 19:06:55
575
原创 消息队列—Kafka的顺序消费
背景:下单生成一条消息,付款生成一条消息,下单消息和付款消息都封装为同样的JSON格式,订阅Kafka同一个topic,现在要求下单和付款有顺序性。解决方案:发送消息的时候下单消息和付款消息指定同样的partitionKey,此时Kafka经过hash运算,同一笔订单的下单消息和付款消息都在会落在同一个Partition中。此时可以满足先执行下单再执行付款。如果消费者开启了线程池利用多线程处理,此时又可能出现先付款再消费的情况,此时可以利用Map缓存来解决问题。获取消息,如果是下单消息,
2022-05-22 23:04:38
1018
转载 解决 swap file swp already exists问题
在 Linux 下的vim编辑过程中,由于某种原因异常退出正在编辑的文件,再次编辑该文件时,会出现如下提示:使用vim编辑文件实际是先 copy 一份临时文件并映射到内存给你编辑, 编辑的是临时文件, 当执行:w 后才保存临时文件到原文件,执行:q 后才删除临时文件。每次启动检索是否有临时文件, 有则询问如何处理,就会出现如上情景。解决办法:将隐藏的 *.swp 文件删除即可,原先的文件便可再次编辑。...
2022-05-21 17:06:00
1219
转载 关与 @EnableConfigurationProperties 注解
@Configuration注解下面对比上面的区别:下面的对象创建完放在Bean中,上面的只是创建了一个对象。此时可以使用@Bean注解。特殊说明:
2022-05-18 15:46:51
255
转载 Java如何理解多态
多态到底是啥,就是当子类继承父类的方法时,对其继承下来的方法按照自己的方式重新定义(覆盖重写),我用父类引用指向子类对象,可以实现每个该引用体现出不同继承同一个父类的子类表达自己的方法内容。提到多态肯定很多人会想到向上转型和向下转型,那今天就聊聊什么是向上转型和向下转型。1.向上转型之前继承有提到过。父类引用指向子类对象。这时的引用只能调用子类覆盖重写了的方法,不能调用子类特有方法。自动转换public class Main { public static void main(Str...
2022-04-30 21:08:01
108
原创 No qualifying bean of type ‘javax.servlet.Filter‘ available
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.servlet.Filter' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annot.
2022-04-28 11:37:04
796
原创 数据库—索引失效原因解释
联合索引的失效问题分析:范围查找的右边索引会失效。如果a不是范围查询,此时a,b的索引都能使用到//以a结尾的在B+树结构中并不是有序的select * from test_user where a like '%a';//以a开头的在B+树结构中是有序的select * from test_user where a like 'a%';示例:第一条语句:第二条语句:第三条语句:......
2022-04-21 21:33:25
1066
原创 零拷贝整理
从磁盘读取数据到内核缓冲区,内核拷贝数据到用户进程,应用进程会将数据拷贝到内核空间的Socket缓冲区,通过Socket缓冲区写入磁盘别的位置或者发送出去。这个过程中从内核空间和用户空间拷贝了2次,涉及了内核态和用户态的切换,需要CPU参与,磁盘和内核空间的切换使用DMA,不需要CPU。零拷贝:用户空间和内核空间的共享一块物理内存,如下图,通过DMA从磁盘读取到共享空间,从共享空间拷贝数据到内核空间的Socket缓冲区,最后通过DMA写入磁盘。在kafka中也采用了类似的方式:非零拷
2022-04-20 20:39:44
334
原创 redis 数据库 缓存一致性
1.常用的缓存图如下:2.不要考虑使用update更新缓存,因为有并发性的问题问题说明:线程1更新数据库,线程2更新数据库,线程2先更新缓存,线程1再更新缓存,此时就会导致缓存中的是旧的数据,数据库里是新的数据。解决办法:Cache Aside Pattern,简单说采用先写库,再删除缓存的方式。3.不能使用先删除缓存,再写库的,问题说明,线程1删除了缓存,此时线程查询,会将数据库的值写入缓存,线程1进行更新,此时会发现缓存和数据库不一致。下面是先操作数据库,再操作...
2022-04-11 08:26:06
1375
原创 JVM—内存布局
1.JVM内存布局组成:包含堆区(Heap),元数据区(Metaspace),虚拟机栈(JVM Stack),本地方法栈(Native Method Stacks),程序计数器(Program Counter Register)2.堆(Heap):1)概括说包含了新生代和老年代,其中新生代又包含了Eden, Survivor(from, to)。每次Minor GC,会将Eden和Survivor from中存活的对象复制到Survivor to中。2)晋升老年代条件是age为15,大对象直
2022-04-10 22:59:18
1231
原创 JVM—G1笔记
1.JVM调优的两个指标:吞吐量,停顿时间停顿时间:简单理解为STW的时间,此时用户代码不会执行。吞吐量:运行用户代码时间/(运行用户代码时间 + 运行垃圾收集器的时间)这两者是矛盾的,选择了停顿时间意味着要牺牲了吞吐量,选择了吞吐量意味着要牺牲停顿时间。根据具体的业务场景,选择优先停顿时间还是优先吞吐量。2.G1的参数设置:-XX:+UseG1GC 开启G1-Xms2G -Xmx2G 设置堆的大小,G1一半不需要手动设置eden和survivor的大小,G1自己动态调整-Xss
2022-04-10 16:06:48
565
原创 JVM——OOM处理
一次OOM产生和分析演示:1. IEDA配置-Xmx30M -Xms30M -Xmn10M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=D:\tmp\finance-collection-heapdump.hprof在OOM的时候dump出文件2. 演示代码:public void createOrderList(){ List<Order> list = new ArrayList<>
2022-04-10 08:45:27
591
原创 Integer.valueOf和new Integer的区别
Integer currentVersion = new Integer(1);此时sonar报错,并建议使用Integer.valueOf()方法:Constructors forString,BigInteger,BigDecimaland the objects used to wrap primitives should never be used. Doing so is less clear and uses more memory than simply using the...
2022-02-16 13:19:49
6308
原创 使用函数式编程优化代码
原来的代码逻辑:@Component@Slf4j@JobHandler(value = "wechatSettlementHandler")public class WechatSettlementHandler extends IJobHandler { @Autowired private SettlementBatchResource settlementBatchResource; @Override public ReturnT<String&
2022-02-07 17:07:10
401
原创 Sentinel流控
下载jar包双击安装:在浏览器打开控制面板:流控模式(直接)设置:对/testA的url进行限流设置:阈值类型——QPS单机阈值设置:流控模式(直接)演示:此时QPS大于1时,此时的请求返回:阈值类型——线程数单机阈值设置:当调用该api的线程数达到阈值的时候,就进行限流。自己的理解,tomcat多个线程,当线程在处理时,又来了新的任务,此时就会触发线程数单机阈值。流控模式(关联):当与A关联的资源B达到阈值后,就限流A自己(支付接口达...
2021-11-02 00:00:00
125
原创 Sentinel热点key
热点即经常访问的数据,很多时候,我们希望统计某个热点数据访问频次最高的topK数据,并对其进行限制。例如:商户ID为参数,统计一段时间内最常购买的商品ID并进行限制。热点限流源码: BlockException类某个方法出问题了,找对应的兜底降级方法 @SentinelResource测试-配置:测试代码:@GetMapping("/testHotKey") @SentinelResource(value = "testHotKey", blockHandler .
2021-11-02 00:00:00
109
转载 Linux生成公钥和私钥
服务器A: 192.168.1.1服务器B: 192.168.1.2服务器A:配置:ssh-keygen -b 2048 -t rsa#这里的-b 2048 是密钥加密的长度,最好设大点,有消息称美国有黑客解决 ssh的密钥进行破解。#http://bbs.yuloo.com/thread-860154-1-1.html直接回车3次key文件会保存在/root/.ssh目录下这时候.ssh目下会多出几个文件id_rsa 私...
2021-10-25 20:17:23
8419
原创 redis—分布式锁
Redis分布式锁的知识点:1.要设置有效时间,这是基于如果逻辑执行到中间出现异常,没有执行del释放锁,就会导致死锁,所以要使用expire设置有效时间。2.setnx和expire指令是可以同时执行的。3.第一个线程执行逻辑的时间过长,超过了锁的超时限制,此时第二个线程就会获取到锁,第一个线程执行完逻辑会把锁释放,第三个线程会在第二个线程执行代码逻辑时,重新获取锁。解决办法是将value设置一个随机值,释放锁前先匹配随机值是否一致。注意匹配value和删除key不是原子操作,此时需要lu
2021-08-26 22:14:03
191
转载 ON DUPLICATE KEY UPDATE 用法与说明
ON DUPLICATE KEY UPDATE作用先声明一点,ON DUPLICATE KEY UPDATE为Mysql特有语法,这是个坑语句的作用,当insert已经存在的记录时,执行Update用法什么意思?举个例子:user_admin_t表中有一条数据如下表中的主键为id,现要插入一条数据,id为‘1’,password为‘第一次插入的密码’,正常写法为:INSERT INTO user_admin_t (_id,password) VALUES ('1','第一次插
2021-08-26 17:19:10
424
原创 剑指offer 字符串出现次数的TopK问题(哈希相关的问题)
描述给定一个字符串数组,再给定整数k,请返回出现次数前k名的字符串和对应的次数。返回的答案应该按字符串出现频率由高到低排序。如果不同的字符串有相同出现频率,按字典序排序。对于两个字符串,大小关系取决于两个字符串从左到右第一个不同字符的 ASCII 值的大小关系。比如"ah1x"小于"ahb","231"<”32“字符仅包含数字和字母[要求]如果字符串数组长度为N,时间复杂度请达到O(NlogK)分析:现存入HashMap,此时时间复杂度为O(N),再将HashMap转为
2021-08-22 19:51:59
427
原创 调整数组顺序使奇数位于偶数前面
描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:遍历两次数组,第一次只取奇数,第二次只取偶数。import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整
2021-08-22 17:23:35
75
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人