![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 76
aasoga
这个作者很懒,什么都没留下…
展开
-
fastjson的内存泄漏问题
内存泄漏 metaspace内存泄露原创 2023-01-30 20:07:19 · 3714 阅读 · 0 评论 -
Netty相关面试题
1.Netty 是什么?Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。2.Netty 的特点是什么? 高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。 传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实原创 2022-02-11 11:53:06 · 314 阅读 · 0 评论 -
面试题总结(垃圾回收相关)
Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的一些知识点。不管在实际开发中你使用程度怎么样,为了面试不被压价,还是非常有必要对它做一个较深入的理解。本篇对JVM中常用的几种垃圾回收器的主要特点,使用场景及优化建议做一个简单介绍,希望起到抛砖引玉的效果,对你入门有所帮助。新生代回收器 Serial ParNew parallel 老年代回收器 Serial Old CMS Parallel原创 2021-06-09 14:21:50 · 258 阅读 · 3 评论 -
微服务相关问题(限流,秒杀系统)
微服务为了保证高可用常用的几个手段:限流,降级,缓存和熔断等,这里讲一下几种限流方案。限流可以保证使用有限的资源提供最大化的服务能力,按照预期流量提供服务,超过的部分将会拒绝服务、排队或等待、降级等处理。限流的类库有很多,不同语言的有不同的类库,如大Java的有concurrency-limits、Sentinel、Guava 等1、计数器固定窗口计数器计数限流是最为简单的限流算法,日常开发中,我们说的限流很多都是说固定窗口计数限流算法,比如某一个接口或服务1s最多只能接收1000个请求,那么我原创 2021-05-28 15:33:00 · 218 阅读 · 0 评论 -
Java面试题总结(事物)
1、事物的四个隔离级别严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性,简称 ACID。原子性(Atomicity),可以理解为一个事务内的所有操作要么都执行,要么都不执行。 一致性(Consistency),可以理解为数据是满足完整性约束的,也就是不会存在中间状态的数据,比如你账上有400,我账上有100,你给我打200块,此时你账上的钱应该是200,我账上的钱应该是300,不会存在我账上钱加了,你账上钱没扣的中间状态。 隔离性(Isolation),指的是多个事务并发执行的时候不原创 2021-04-01 16:44:17 · 1307 阅读 · 0 评论 -
mysql的分库分表及主从同步
⾸先分库分表分为垂直和⽔平两个⽅式,⼀般来说我们拆分的顺序是先垂直后⽔平。垂直分库基于现在微服务拆分来说,都是已经做到了垂直分库了垂直分表如果表字段⽐较多,将不常⽤的、数据较⼤的等等做拆分⽔平分表⾸先根据业务场景来决定使⽤什么字段作为分表字段(sharding_key),⽐如我们现在⽇订单1000万,我们⼤部分的场景来源于C端,我们可以⽤user_id作为sharding_key,数据查询⽀持到最近3个⽉的订单,超过3个⽉的做归档处理,那么3个⽉的数据量就是9亿,可以原创 2021-05-20 13:27:57 · 732 阅读 · 0 评论 -
各种调优(tomcat,jvm,Kafka)
1、tomcat调优采用动静分离节约tomcat性能:nginx+tomcat实现动静分离,nginx实现静态资源的访问调整tomcat线程池:比如maxThreads线程池中最大的线程数量minSpareThreads线程池中允许空闲的线程数量maxIdLeTime一个线程空闲多久算是空闲线程调整tomcat连接器:enableLookups="false"关闭dns解析,减少性能损耗修改tomcat的运行模式:可以将protocol改为NIO模式禁用AJP连接器...原创 2021-05-13 16:46:41 · 408 阅读 · 1 评论 -
java常用监控命令
Java常用的监控命令比如top,jps,jmap等,下面具体讲解一下使用方式1、top使用top展示的信息如下所示其中第一行展示了机器的负载(load)信息:当前时间,机器运行了多长时间,有多少登录用户,系统在过去的1分钟,5分钟和15分钟内的平均负载第二行展示了进程调度情况第三,四,五行分别展示了CPU使用情况,内存占用状态,包括主存与交换分区后面展示了具体进程的使用情况2、jps展示了应用程序进程id及启动类名jsp -l 输出应用程序主类完整package原创 2021-05-11 14:35:01 · 915 阅读 · 0 评论 -
mybatis generator 使用方法
1、pom配置<!-- mybatis-generator-core 反向生成java代码--><dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version></dependency&g原创 2021-05-10 15:15:33 · 303 阅读 · 0 评论 -
sql语法理解(exist)
1、今天有个需求,就是要找到我们从原表A洗出来的映射表B中的数据是否全,就是A表中是否有没有在B表的,后来研究了一下,可以用not exist 实现,exist和in的区别就是in是in查询的条件只能返回一个字段,而exist可以用多个字段,因此在not exist 的结果集中匹配AB所有的列,那返回的就是所有不相等的,即B不在A中的数据相关博文:https://www.cnblogs.com/flzs/p/11542181.html...原创 2021-04-28 16:46:14 · 853 阅读 · 0 评论 -
解决idea粘贴空格时显示NBSP的问题
在网上看到的,空格会显示成特殊字符,可以在This behavior can be disabled at Help | Find Action | Registry | editor.show.special.chars 即可原创 2021-04-10 14:30:04 · 3646 阅读 · 3 评论 -
AQS理解
AQS全称是AbstractQueuedSynchronizer,即抽象的队列式的同步器,定义了一套多线程共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch.AQS的框架如下:fifo即first in first out,先进先出队列CLH锁其实就是一种是基于逻辑队列非线程饥饿的一种自旋公平锁CLH锁原理如下: 首先有一个尾节点指针,通过这个尾结点指针来构建等待线程的逻辑队列,因此能确保线程线程先到原创 2021-03-16 16:44:14 · 209 阅读 · 0 评论 -
Kafka与Rocketmq的区别
系统一直使用的Kafka用来消费业务流水,最近在群里听到反馈说希望转到Rocketmq,支持更多的业务功能,因此去了解了一下,发现相比之下Kafka确实应用场景太少了,基本就是消费日志,相比之下Rockmq有很多优秀的特性,下面具体介绍一下。Kafka首先介绍一下Kafka,Kafka是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统,比较常用于日志收集系统,和消息系统等1、可以以时间复杂度为O(1)的方式提供消息持久化能力,对TB以上的数据也能保持常数时间原创 2021-02-02 19:33:51 · 4757 阅读 · 0 评论 -
java基础 与& 或| 和左移<< 右移>>的使用
看到一个文章写的很清楚https://www.jianshu.com/p/eae8da7caac6&的意思就是只有两者都为1的时候,值才为1,和true,false的判断是一致的|的意思是只要有一个为1,那么就为1常用来取某些特定位数的值,可以和<< >> 搭配使用...原创 2021-01-19 11:52:52 · 91 阅读 · 0 评论 -
2020-12-14
better do it than to live with the fear of it原创 2020-12-14 15:11:00 · 72 阅读 · 0 评论 -
subList引起的java.util.ConcurrentModificationException原因解析
最近需要处理一份挺大的数据,因此想到用多线程,将文件数据读到list,然后切割成n份处理,结果报了ConcurrentModificationException,大概的代码如下: public void execute(ExecutorContext executorContext) { List<String> lists = Utils.readFile2List("list.txt"); lists = lists.stream().map(a -&原创 2020-10-16 11:21:13 · 1584 阅读 · 0 评论 -
Java面试题总结(Java基础知识,JVM)
1、基本数据类型int是几个字节,4个字节,一个字节是8位,byte是一个字节,取值范围是正 00000000 0 到01111111 127 负 10000000 -128 到11111111 -1,以下代码会返回-56,因为456的二进制表示是111001000,然后由于int是32位的二进制,高位补0,在计算机中,即为00000000000……111001000,int转成byte的时候,计算机只保留最后8位,即11001000,最高位是1,表示是一个负数,负数都是以补码保存,其反码为0011..原创 2020-08-27 19:58:56 · 146 阅读 · 0 评论 -
Java面试题总结(SpringMVC相关)
1、Spring的循环依赖及解决方式:循环依赖:就是循环引用,两个或者两个以上的bean互相持有对方,最终形成闭环。Spring中循环依赖的场景:1、构造器的循环依赖 2、field属性的循环依赖如何检测:bean在创建的时候会给bean打标,如果递归调用回来发现正在创建中,则说明循环依赖了具体:Spring容器会将所有正在创建的bean标识符放在一个“当前创建bean池”中,即singletonsCurrentlyInCreation。如果在创建bean过程中发现自己已经在“当前创建bea原创 2020-08-14 19:09:07 · 202 阅读 · 0 评论 -
Java面试题总结(BIO,NIO,AIO )
BIO:blocking I/O 同步阻塞IO模式,数据的读取写入必须阻塞在一个线程内等待其完成问题:由于是同步阻塞的,因此新需求来时只能通过新建线程的方式来接受请求,导致线程堆栈溢出等问题伪异步IO:可以通过使用线程池来优化,不过在并发量增加时会导致线程量急剧膨胀,NIO: non-blocking IO 同步非阻塞IO,IO面向流,而NIO面向缓冲区,任何时候访问NIO的数据,都是面向缓冲区的,最常用的缓冲区是ByteBufferchannel(通道):NIO通过通道进行读写,通道是双向原创 2020-07-24 17:22:11 · 448 阅读 · 1 评论 -
mybatis相关问题整理
1、mybatis的实现原理:需要编写dao接口,接口的全名对应xml文件的namespace,方法名对应文件中的MappedStatement中的id值,工作原理是通过JDK动态代理,为dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回2、分页插件的原理:针对ResultSet结果执行的内存分页,分页插件是使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql原创 2020-07-23 20:13:40 · 120 阅读 · 0 评论 -
redis的线程模型,过期策略,持久化,缓存穿透和缓存雪崩,分布式锁,redis优化
redis使用文件时间处理器,是单线程的,它采用IO多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器进行处理命令到达服务端以后不会立即执行,而是进入一个队列中,然后I/O多路复用程序通过队列向文件事件分派器传送socketredis时间过期策略:定期删除+惰性删除定期删除:默认每隔100ms随机抽取过期的key进行删除,防止过期key太多占用内存惰性删除:在查询的时候会判断是否已经过期,如果已经过期则删除内存淘汰机制:当内存使用达到maxmem原创 2020-07-22 11:19:59 · 184 阅读 · 0 评论 -
网络相关问题(体系结构,tcp三次握手)
1、计算机网络体系结构:五层协议1、应用层:应用层协议主要有域名系统DNS,HTTP协议,支持电子邮件的SMTP协议等,应用层交互的数据单元称为报文2、运输层:运输层主要有两种协议 传输控制协议TCP 提供面向连接的,可靠的数据传输服务用户数据协议UDP 提供无连接的,尽最大努力的数据传输服务,不保证数据准确性3、网络层,又叫网际层或者IP层4、数据链路层5、物理层...原创 2020-07-30 10:50:11 · 167 阅读 · 0 评论 -
java的内存区域管理
java的内存区域:1、程序计数器:可以认为是当前线程所执行的字节码的字号指示器,同时在多线程情况下,用来记录当前线程执行的位置,从而当线程切换的时候能找到线程之前执行的位置2、Java虚拟机栈:主要有局部变量表,存放了编译器可知的数据类型,对象引用,可能出现两种异常StackOverFlowError 如果虚拟机栈的大小不允许动态扩展,当线程请求栈的深度超过当前虚拟机栈的最大深度的时候OutOfMemoryError 如果允许动态扩展,并且当线程请求栈时内存用完了,抛出此异常3、本地方原创 2020-07-15 21:13:16 · 114 阅读 · 0 评论 -
多线程知识总结(synchronize,volatile,ThreadLocal,线程池,AQS)
1、线程和进程的区别进程是一个程序的执行过程,,系统运行一个程序既是一个进程从创建运行到消亡的过程线程与进程相似,但是是比进程更小的执行单位,多个线程共享进程的堆和方法区,但是每个线程有自己的程序计数器,虚拟机栈和本地方法栈java的内存区域:1、程序计数器:可以认为是当前线程所执行的字节码的字号指示器,同时在多线程情况下,用来记录当前线程执行的位置,从而当线程切换的时候能找到线程之前执行的位置2、Java虚拟机栈:主要有局部变量表,存放了编译器可知的数据类型,对象引用,可能出现两种异常原创 2020-07-10 21:02:08 · 564 阅读 · 1 评论 -
Java面试题总结(rpc,kafka)
看到一个rpc的图画的很好rpc进行网络通信一般用的netty原创 2020-06-30 10:31:50 · 747 阅读 · 0 评论 -
Java面试题总结(泛型的实现,hashmap的实现,List数据结构)
1、java泛型的内部实现:java的泛型是伪泛型,会在编译时做类型擦除(类型擦出(type erasure),变为原始变量,如果不指定泛型类型,则在jvm中默认是object,如果指定了则是指定的类型,比如publicclassPair<TextendsComparable&Serializable>{}这种缺陷:不能用instanceof来检测泛型,因为由于类型擦除的原因,任何泛型都会擦除成为他的原始类型static方法和static域不能引用泛型变量,...原创 2020-06-26 22:15:30 · 552 阅读 · 0 评论 -
学习算法:字典序的第k小数字
题目如下:给定整数n和k,找到1到n中字典序第k小的数字。注意:1 ≤ k ≤ n ≤ 109这道题的难点在于字典序,字典序是按照前缀大小来排序的,比如11和2,实际11排在2的前面,和正常数字排序很不一样,因此需要抽象出字典序模型,即实际上是一个十叉树,从网上找了个图如下因此只需要确定三件事就可以确定k的位置即:怎么确定一个前缀下所有子节点的个数?如果第 k 个数在当前的前缀下,怎么继续往下面的子节点找?如果第 k 个数不在当前的前缀,即当前的前缀比较小,如何...原创 2020-06-26 12:12:59 · 420 阅读 · 0 评论 -
java面试题总结(redis的数据结构和集群,mysql索引的数据结构,mysql锁机制)
对整理的面试题总结一些简略的回答,深入的分析还是需要自己去研究1 微服务的限流方案,和服务降级方案分布式微服务架构下,某一个节点出现故障,会导致雪崩效应。分布式总体限流方案:利用redis,记录调用量,服务降级,限流降级:把非重点的服务关闭。故障降级:设置默认值,采用兜底数据,开关预置、配置中心2 Synchronized原理:每个对象有一个监视器锁(monitor)。当monitor被占用时就会处于锁定状态,线程执行monitorenter指令时尝试获取monitor的所有权http:/原创 2020-06-22 23:23:16 · 464 阅读 · 2 评论 -
每天一道算法题-两个链表逆序相加
给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807来源:力扣(LeetCode)链接:https://lee...原创 2020-06-20 15:11:05 · 359 阅读 · 0 评论 -
每天一道算法题(1)
1、求一个字符串连续不重复子串的最长长度即比较经典的移动游窗,将字符放入队列中,当有重复字符时则移动左标,最后取左右标间隔最大的。有两种方式可以实现,第一种比较简单的list方式// list方式 public static int lengthOfLongestSubstring(String s) { if (s.length() == 0) { return 0; } String[] strArr = s.原创 2020-06-20 01:19:06 · 302 阅读 · 0 评论 -
记录最近线上的一些小bug
最近出了好几次线上问题,还是太不细心了,后端还是需要严格的测试和验证,否则稍有遗漏就可能出严重的线上问题,记录下最近出现的问题,也希望以后问题能越来越少。1、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have anerrorin your SQL syntax; check the manual that corresponds to your MySQL server version for the ..原创 2020-06-05 10:59:44 · 247 阅读 · 0 评论