面试积累
文章平均质量分 53
苏格拉低
这个作者很懒,什么都没留下…
展开
-
mysql中的锁
https://www.jianshu.com/p/c1d40171e191inndo行锁,表锁,页锁乐观锁,悲观锁读锁,写锁,原创 2019-10-31 23:46:29 · 320 阅读 · 0 评论 -
深度分页问题
什么是深度分页?select * from table limit 1000000,10这条语句要查询10000000条数据之后的10条数据,那么对于mysql来说肯定废了。解决方案:通过覆盖索引select * from table where id > (select id from table limit 1000000,20) limit 20;...原创 2019-10-31 20:40:48 · 2965 阅读 · 0 评论 -
redis key时间删除规则
lru和ttl主要分两步1:找到过期的key2:开始删除 (通过每秒轮训方式)当key过期后是查不到这个key数据的zset底层存储结构: ziplist原创 2019-10-31 18:52:20 · 1208 阅读 · 0 评论 -
spring单列线程安全吗?
答案:严格来讲spring没有对单列做并发安全处理解决安全问题:将singleton 改成 prototype为什么会产生安全问题?无状态bean:就是所谓的 这个bean中的参数没人用了, 一次request结束了,扔池子里,谁都可以用。有状态bean:就是 正在使用的bean。无状态bean其实没啥问题,那么有状态bean呢,这里有个场景,两个事务 t1和t2同时访问...原创 2019-10-30 23:01:17 · 273 阅读 · 0 评论 -
g1和cms区别
cms回收器执行步骤1、初始标记:GC roots 可以理解为对象指向的标记2、并发标记: GC roots Tracing 可以理解为 通过初始标记找到了要删除的对象 也就是堆中的指向对象3、重新标记: 可以理解为重新执行了一遍 初始标记 和 并行标记 产生标记记录4、删除标记:标记删除发进行并发删除优点:并行执行,低停顿缺点:1、不停顿耗线程,耗内存,整体效...原创 2019-10-28 23:39:30 · 7902 阅读 · 0 评论 -
java同步线程类
1、countDownLatch:等待线程池所有线程都执行完毕再去释放线程;boolean await(long timeout, TimeUnit unit) // 递减计数器的计数,如果计数到达零,则释放所有等待的线程。CountDownLatch(int count) // 使当前线程在计数器倒计数至零之前一直等待,除非线程被中断。 import lombok.ext...原创 2019-10-25 11:24:14 · 208 阅读 · 0 评论 -
jvm直接内存
直接内存使用场景?有很大的数据需要存储,它的生命周期很长 适合频繁的IO操作,例如网络并发场景直接内存何时回收?当old区满了 顺便回收直接内存非直接内存链:本地io -- 直接内存 -- 非直接内存 -- 直接内存 -- 本地io直接内存操作链:本地io -- 直接内存 -- 本地io...原创 2019-10-24 21:32:45 · 527 阅读 · 0 评论 -
redis三个线程有序打印
t1 、 t2 、 t3方法一:t2.t1().start()t3.t2().start()main 执行 t3.start方法二:t1.start()t1.join();t2.start()t2.join();t3.start()t3.join();原创 2019-10-24 21:09:56 · 153 阅读 · 0 评论 -
redis单线程为什么快
1、redis 存储结构简单 key,value2、redis直接和内存打交道3、redis应用 多路复用IO模式(可以理解为 异步阻塞原理)4、redis是单线程, 避免了 锁,线程切换耗cpu等问题https://blog.csdn.net/chenyao1994/article/details/79491337...原创 2019-10-24 20:30:02 · 143 阅读 · 0 评论 -
spring注入方式
@Resouce byName注入@Autowired 结合 @Qualifier 实现按名称注入原创 2019-10-23 22:55:12 · 142 阅读 · 0 评论 -
mybatis中${}和#{}的区别
#{}防止sql注入通常字段都用这个 建议用这个 不带引号${}不防止sql注入 order by ${} 时候用这个 带引号原创 2019-10-23 22:35:07 · 118 阅读 · 0 评论 -
trancation事务嵌套问题
问两个trancation事务声明的方法t1和t2,这时候t1调用t2,t2起作用吗?答:不起作用,对于t2来说事务失效如何让其不失效?答案:通过代理去调t2中的方法,原理和代理模式一样(Service)(AopContext.currentPorxy()).fangfa1();...原创 2019-10-23 22:16:04 · 511 阅读 · 0 评论 -
线上cpu爆了排查方案
https://blog.csdn.net/u011277123/article/details/101673372原创 2019-10-22 21:15:24 · 205 阅读 · 0 评论 -
msyql事务隔离心得
脏读:事物A操作修改操作没有提交事务,事务B读取数据拿到修改后的数据去执行操作了,这时候第事务A回滚,对于事务B就是脏读。不可重复读:事务A读取数据,事务B把数据改了,事务A读取了事务B更改后的数据。同一个是事务里读出了两个不一样的数据。幻读:事务A修改全表,事务B增加一条数据,对于事务A就是幻读。mysql默认可重复读mysql如何处理可重复读:默认有两个隐藏字段,数据插...原创 2019-10-21 21:41:30 · 120 阅读 · 0 评论 -
线上JVM调优问题
前言:线上服务器偶尔会重启,操作服务器时有卡顿,返回接口效率低(不定时出现)。机器配置, 双核 4g解决问题思路首先我看了下当前JVM的内存配置新生代区:-Xmn350M最大可用内存:-Xmx1800M初始化内存:-Xms 1000M每个线程堆栈大小:-Xss 300k持久带:一般是堆内存的3/8 64m第一次优化:-Xmn350M ->...原创 2019-10-20 23:09:52 · 560 阅读 · 0 评论 -
redis分布式事务脏数据问题
1、通过redisson处理redis分布式事务锁redis分布式事务存在的问题?当一个redis master宕机了,在进行主从复制的时候又来了一个事务,这时候新的master又好了,这种情况就出现了两把分布式事务锁。处理方案?通过mysq进行处理,通过幂等方式处理,其实分布式锁解决的就是幂等问题主要设计思路,消息表:主要存要操作的消息操作去重,(也...原创 2019-10-20 16:36:01 · 1596 阅读 · 0 评论 -
redis集群扩容槽
redis-cli 自动扩容1、将新节点加入集群2、通过 redis-cli -p 6380 确认集群状态,查询出新分配的槽平均数,要迁移多少个槽3、通过redis-cli 进行自动迁移槽,迁移到新机器节点上,将一个新节点配置好(必填),将多个老节点,和要迁移的槽数量写好,开始自动迁移槽4、使用redis-cli --cluster rebalance检测节点间槽的均衡性,查看...原创 2019-10-20 14:15:58 · 390 阅读 · 0 评论 -
redis hash数据结构用哪种序列化
什么时候用到序列化?当跨平台存储的时候用到序列化什么是序列化?就是将对象转换成其他形式存储,然后在通过反序列化转化成对象呈现效率较高的序列化?jackson redis serilazer...原创 2019-10-18 13:25:17 · 411 阅读 · 0 评论 -
log4j日志输出级别
一共8个级别 OFF FATAL ERROR WARN INFO DEBUG TRACE ALL主要用到ERROR WARN INFO DEBUG 四个级别ERROR :常见错误打印WARN: 错误提醒INFO:线上打印DEBUG:线下打印...原创 2019-10-18 12:31:00 · 167 阅读 · 0 评论 -
redis主从数据丢失解决方案
如果master还没有同步到slave业务读取脏数据问题问题阐述:master用来写,slave用来读,当master还没有同步到slave这时候我们读slave出现了脏数据解决方案:在redis缓存中增加标记.A发起写请求,更新了主库,但在缓存中设置一个标记,代表此数据已经更新,标记格式(业务代号:数据库:表:主键ID)根据自己业务场景。2.设置此标记,要加上过期时间,可以为预估的...原创 2019-10-18 00:00:12 · 1157 阅读 · 0 评论 -
mybatis存在的问题
嵌套结果集会合并语句如下 SELECT o.order_id AS orderId,o.payment ,o.buyer_nick,o.shipping_code ,o.status AS orderState,i.title ,i.price FROM tb_order AS o,tb_item AS i,tb_order_item AS oi WHER...原创 2019-10-16 23:45:03 · 190 阅读 · 0 评论 -
TCC分布式事务
什么是TCC分布式事务:就是解决多服务之间接口调用时的数据原子性。对于TCC分布式事务无非就是几个方法初步操作(Try):也可以看成 RM本地事务的一个封装确认操作(Confirm):在try基础上做的一个确认操作逻辑取消操作(Cancel):如果确认操作或者try操作在tcc框架中检测到问题 直接回滚所有服务的try说白了就是在 服务级 上游又增加了一个TCC框架(...原创 2019-10-16 23:28:15 · 295 阅读 · 0 评论 -
HashMap底层实现原理
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。简单说下HashMap的实现原理:首先有一...原创 2018-10-25 14:53:03 · 2235 阅读 · 0 评论 -
分布式服务器均匀访问解决方案
https://blog.csdn.net/l919898756/article/details/81129234转载 2019-06-03 15:09:04 · 284 阅读 · 0 评论 -
mysql生成唯一主键的方法
UUID.randomUUID();或者获取时间到秒获取唯一主键或者写算法获取唯一主键原创 2019-05-28 15:00:57 · 4383 阅读 · 2 评论 -
redis分布式锁详解
redis分布式锁就几个方法1、setnx(key,value) 返回boolean 1为获取锁 0为没获取锁2、expire() 设置锁的有效时间3、getSet(key,value) 获取锁当前key对应的锁的有效时间4、deleteKey() 删除锁setnx(lockkey, 当前时间+过期超时时间),如果返回 1,则获取锁成功;如果返回 0 则没有获取到锁,转向...原创 2019-05-13 15:52:45 · 1485 阅读 · 0 评论 -
spring用到的设计模式
1、工厂模式在spring进行IOC bean注入的时候用到了工厂模式其实很简单 就是创建一个接口(接口中定义一个方法,这就是所谓的工厂),然后创建多个实体类来实现这个接口,然后new不通的实体。publicinterfaceProvider{publicSenderproduce();}publicclassSendSmsFactor...原创 2019-05-16 18:04:26 · 560 阅读 · 0 评论 -
TCC分布式事物实现原理
目前在做订单系统由于以来的服务比较多以及订单本身的业务逻辑也是很多难免遇到事物处理这里我采用的是TCC分布式机制其实很简单就是通过代码方式来 commit 和 RollBack 和 Cancel1. TCC的机制明眼一看就知道,TCC应该是三个英文单词的首字母缩写而来。没错,TCC分别对应Try、Confirm和Cancel三种操作,这三种操作的业务含义如下:Try:预留业务资...原创 2019-05-16 15:57:23 · 937 阅读 · 0 评论 -
JVM详解
首先配置 -Xms 初始化内存大小 (物理内存的64/1) -Xmx 堆最大内存大小 (物理内存的4/1)堆 = 新生代+老年代(3/8)+持久代(64m固定)典型设置:java-Xmx3550m -Xms3550m -Xmn2g -Xss128k-Xmx3550m:设置JVM最大可...原创 2019-06-26 15:56:30 · 196 阅读 · 0 评论 -
Mysql从小白到大神
一、,mysql InnoDB引擎 底层存储结构index page:存放mysql的所有数据date dictionary:数据字典(当我们PDL操作时);lock info:行锁(当update1000w行记录时候要分1000w个行锁,很影响性能,所以避免行锁。但是在mysql中行锁达到一定量的话会自动升级为表锁)undo page:缓存(当我们每次做修改时候,都要先把...原创 2019-07-18 14:35:18 · 279 阅读 · 0 评论 -
mysql优化
应用访问的优化:1,减少数据访问(减少磁盘的访问):可以通过缓存处理,在应用上通过缓存redis去处理,减少mysql的访问。 也叫读写分离2,返回更少的数据(减少网络传输和磁盘访问)减少网络传输:在访问数据库的时候,网络访问是有时间的,一次网络传输大概是0.2毫秒,如果网络慢了那这个时间就更长了,3,减少交互次数(减少网络传输)通过批量交互,比如我insert1次和...原创 2019-07-21 16:28:07 · 123 阅读 · 0 评论 -
jvm详解
1, jvm内存模型方法区:主要存 虚拟机加载的类信息(字段,方法,接口),常量信息,静态变量,以及编译后的代码等数据。常量池空间:属于方法区中的一块区间,string s1 = “1” 和 string s2 = "1" 这时候两侧变量的信息存入到常量池中,而 new string(“1”) 这羊的初始化是存入到 堆中。堆:主要存 初始化的对象。程序计数器原理:...原创 2019-07-31 17:06:51 · 189 阅读 · 0 评论 -
spring事物隔离级别
1、脏读张三的工资是5000, 事物A把张三的工资改成8000,不提交事物这时候事物B读取张三的工资是8000,然后去操作了,这时候事物A发现有问题,又rollback了,这时候对于事物B而言就读到了脏数据。2、不可重复读张三的工资是5000,事物A读取张三的工资是5000,不提交事物这时候事物B把张三的工资改成8000,提交事物这时候事物A再次查询张三的工资是80...原创 2019-07-23 11:04:40 · 307 阅读 · 0 评论 -
springAOP心得
springAOP面向切面,其实就是在项目中通过切面去增强某些方法或对象进行解耦。目前项目中用到的切面是通过aspectj实现的,日常操作一般都是 定义切面路径,然后执行切面方法逻辑,然后可以执行前置方法(Before)和后置方法(After)在本项目中通过切面 首先定义了 接口格式(logId,appId,Object),然后是定义异常处理,然后是定义日志打印以及接口时间定义打...原创 2019-08-05 15:59:35 · 388 阅读 · 0 评论 -
spring设计模式心得
代理模式其实就是springAOP,也就是切面编程我个人理解:所谓代理模式就是通过代理的方法去增强非代理方法,从而实现更多功能。比如非代理的方法的功能是初始化一个bean,这时候我们自己写一个代理方法,也去实现非代理方法的接口,并且在方法前后记录日志,那么新增加的日志功能就是代理方法中新增的功能,这样一来我们就把主要功能(初始化bean)和非主要功能(增加日志)分离开来,解决解耦问题。...原创 2019-08-06 11:04:59 · 146 阅读 · 0 评论 -
FactoryBean和beanFactortBean的区别
factoryBean是容器的实例,它是一种特殊的bean,对外呈现Object类型beanFactory是一种规范,也是IOC容器,用来初始化一个beanbeanFactory是一个接口 并不是IOC容器的实现,目前spring提供了两种实现,xmlBeanFactory和aplicationContextaplicationContext封装了beanFactory的所有功能...原创 2019-09-05 13:56:23 · 880 阅读 · 0 评论 -
springBoot自动装配
SpringBootApplication标签是个符合标签,包括compontScan,Configuration,EntableAutoConfiguration自动装配(AutoConfiguration)@Configuration 和 @Bean 配个 然后在applicationContext.getBean(".Class")时候去加载所有bean然后升级成...原创 2019-09-05 14:37:22 · 142 阅读 · 0 评论 -
linux crul命令
linux统一网关 访问接口 post请求curl -H "Content-Type:application/json;" -X POST http://127.0.0.1:8080/workflow-service/loadCacheData -d \'{"caller": {"token": "token","requestId": "1234567890","logId": ...原创 2019-05-24 16:14:26 · 391 阅读 · 0 评论 -
hashmap底层实现以及数据结构
hashmap实现原理简单一句话数组链表结构存储,这里Entry[]是map中的静态类,entry[]数组默认长度为16,每个数组上跟着一个链表,链表什么时候出现呢?就是在hashcode相同时出现,当put时候会生成一个hashcode便于存储位置,但是不避免hashcode相同的情况这个时候就存在链表中(但是链表中虽然hashcode相同但是对象在jvm地址中可是不同的,可以用eque...原创 2019-05-15 11:23:34 · 1441 阅读 · 0 评论 -
String 重载 "+" 原理分析
String 类中的每一个看起来会修改 String 值的方法,实际上都是创建了一个全新的 String 对象,用来包含修改后的字符串内容,这也可以说明 String 对象具有只读的属性。 string 和 stringBuilder public static String getString1(String[] strArray){ String result =...原创 2018-11-01 11:43:59 · 354 阅读 · 0 评论