自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 CSRF和XSS

CSRF(Cross Site Request Forgery)跨站请求伪造:利用后台后有规律的接口,并诱导你去点击,访问这个接口,而这个接口可能就是利用你的账户去做一些事情,比如购买商品,发送邮件等。XSS(Cross-site-scripting):在客户端实现脚本(js)注入(只能在解释型语言的情况下发生)。防止方法:比如为了防止cookie泄漏,可以设置cookie头httpOnly(cookie不能被js读取),secure(cookie只能通过https传输)。...

2020-06-23 21:06:54 278

原创 Zookeeper角色和ZAB协议

1. Zookeeper角色Zookeeper中角色包含Leader,Follower和Observer;其中Follower用于接收客户端请求,并且再选主过程中会参与投票;Observer可以接收客户端请求,并把写请求转发到Leader节点,但不参加投票;2. ZAB协议主备模式消息广播崩溃恢复保证选举出来的Leader拥有整个集群中最大的ZXID...

2020-06-23 18:06:02 305

原创 git已存在工程推送到远程新分支

1. git remote rm origin解除关联原来的远程代码库2. git remote add origin 远程仓库地址添加新的远程仓库关联3. git add .4. git commit -m 'xxx'5. git push -u origin 新建的远程分支名

2020-06-23 17:59:39 536

原创 git关联远程分支

1. git fetch获取最新远程分支2. git branch -a查看所有分支3. git branch --set-upstream-to=origin/xxx设置关联的远程分支4. git push

2020-06-23 16:17:55 297

原创 git查看当前项目关联的远程仓库地址

git remote -v

2020-06-23 15:56:55 13577

原创 单线程的redis为什么快

1. 基于内存的数据库,减少了磁盘IO的次数;2. 单线程的操作减少了资源开销;3. 高效的数据结构比如,string中定义了一个空闲空间,可以减少字符串修改时,重新分配内存的次数。4. 编码转化的思路比如如果一个string中都是整数,那么他的编码就是REDIS_ENCODING_INT;若包含字符串,则编码为REDIS_ENCODING_RAW。...

2020-06-17 11:41:53 86

原创 redo log

jil记录数据库操作的日志,在内存中。

2020-06-16 20:53:51 122

原创 联合索引中的最左匹配原则

联合索引中使用最左边的字段来建立索引;(2,4)对应联合索引(a,b),可以看到最左边的字段是有序的,1 1 2, 2 3 3, 而第二个字段是无序的 1 2 1, 4 1 2,(但是对于相同的a来说, b又是顺序的)...

2020-06-16 20:51:59 853

原创 mysql explain笔记

expalin select * from user;比较好的一篇博客和一张图,https://segmentfault.com/a/1190000021458117?utm_source=tag-newest

2020-06-16 20:41:00 123

原创 mysql没走上索引的一种情况补充

例子:select * from user where id=1其中user中id的数据类型为long,则会触发一个隐式的类型转换,这是个函数操作,所以不会走索引;

2020-06-16 20:38:26 115

原创 索引下推(Index Condition Pushdown)

原来:查到符合条件的索引->逐个回表,判断别的条件是否满足;索引下推:根据联合查询的其他索引做一个筛选,筛选通过的才回表查询,减少回表次数;

2020-06-16 20:35:33 759

原创 mysql change buffer

1. 对于频繁的IDU(Insert, Delete, Update)操作,需要频繁的读取和写入磁盘中的索引页,因此可以将这些操作缓存在change buffer内,在一定条件下才merge到索引页,从而减少磁盘IO数量。2. change buffer在内存中的buffer pool中3. 只针对二级索引(普通),不适用主键索引;4. 适用场景:多IDU操作,少SELECT操作(或者说写多读少);...

2020-06-16 20:28:54 152

原创 git HEAD切换

1. git checkout HEAD^ :将HEAD指向上一节点2. git checkout HEAD~3: 将HEAD指向上面第三个节点3. git branch -f bugFix HEAD^: 将bugFix指向HEAD上面一个节点

2020-06-15 11:46:46 5219

原创 git reset, revert

git reset 回退本地分支git revert回退远程分支

2020-06-15 11:24:39 134

原创 Redis面试题

1. Redis有哪些数据类型,各有什么用?(1) string简单的set,get,做简单的KV缓存(2)hash可以将某个结构化的对象给缓存在redis里;可获得单独某个字段hset,hget(3) list有序列表;lpush mylist 1;(4)set无序集合自动去重,可以用来分布式环境下去重添加一个元素:sadd mySet 1(5)sortedSet有序集合去重并排序zrange board 0 3(升序获得前三个元素)2. red

2020-06-11 20:51:38 103

原创 Session、Cookie、Token总结(面试)

1. 引入:HTTP是无状态协议,无法记得上一次连接的信息,比如记不得用户是否已经登陆等信息。而Session、Cookie、Token便是对HTTP无状态的一种补充;2.Cookie:Cookie是浏览器对于一些信息的键值对形式保存,当浏览器关闭,Cookie也就删除了;3. Session:Session是服务器中保存的对象(Tomcat保存在ConcurrentHashMap<Session>中),生成之后在返回Http response时,会发送sesionId给

2020-06-11 11:55:19 1482

原创 基于GitLab的CodeReview概述

需求确认后,从master创建develop分支 开发人员从develop分支创建自己的feature分支进行开发 master分支发生变更,需要从master分支合并到develop分支、可以考虑定期合并一次 feature分支合并到对应的develop分支之前,需要从develop分支合并到feature分支 feature分支合并到对应的develop分支之后,发布到测试环境进行测试 develop分支在测试环境测试通过之后,合并到release分支并发布到预发布环境进行测试 rele..

2020-06-11 11:27:29 453

原创 RateLimiter原理概述

1. RateLimiter基于令牌桶算法,即以用户设定的恒定速率向令牌桶内放置令牌,用户来执行任务时,只有拿到令牌才能执行;2. RateLimiter对于持续生成令牌,采用的不是定时任务的方式(过于耗费资源,不适合高并发),而是使用延迟计算的方式,即在获取令牌时计算上一次时间nextFreeTicketMicros和当前时间之间的差值,计算这段时间之内按照用户设定的速率可以生产多少令牌;void resync(long nowMicros) { // if nextFreeTic...

2020-06-09 20:58:23 18046

原创 容灾中的热备、冷备、双活、两地三中心

1. 热备:只有主数据中心承担业务,备份数据中心对主数据中心进行实时同步,当主数据中心挂掉,可以自动切换到备数据中心,用户业务不受影响;(双机热备:主机工作,从机会一直发心跳包给主机,当一段时间收不到主机的响应,从机便会认为主机坏了,主动接管主机业务;)2. 冷备:只有主数据中心承担业务,备数据中心定期对主数据中心进行备份,当主数据中心挂掉需要人工切换备数据中心;3.双活:主、备数据中心都承担业务,互为备份、实时同步,主数据中心承担多。4.两地三中心=(本地+异地)+(本地数据中心+本地数据备份

2020-06-09 16:30:32 10222

原创 PV、QPS、TPS

1. PV(Page View): 页面访问量2. QPS(Query Per Second):每秒查询数3. TPS(Transaction Per Second): 每秒事务数(TPS可能包含多个QPS,比如一次访问网页的事务需要多次对服务器发起Query)峰值QPS=(日PV * 0.8) / (60*60*24*0.2)//基于每天80%的请求发生在20%的时间里...

2020-06-09 16:01:57 151

原创 tomcat接受、分配连接(socket)解析

先上图图中和接受、分配连接便是Acceptor,Poller,Worker了1. http-nio-8080-Accepter-0:在NioEndpoint.Acceptor.run()方法里protected class Acceptor extends AbstractEndpoint.Acceptor { @Override public void run() { while (running) { //...

2020-06-08 15:15:34 762

原创 JVM结构变化

1. JDK1.6之前栈区:主要保存方法运行过程中局部变量、对象的引用和基本数据类型。2. JDK 1.7将字符串常量池移到了堆内存中(可以在heap dump中看到)3. JDK1.8之后移除方法区,增加Metaspace区,保存类的各种描述信息,如类名、方法、访问限制、属性等。...

2020-06-06 17:37:53 172

原创 新生代、老生代垃圾收集器总结

1. 新生代回收器:Serial(单线程)、ParNew(Serial收集器的多线程版本)、Parallel Scavenge(新生代并行收集器,追求最大吞吐量);2. 老年代回收器:Serial Old(Serial的老年代版本)、CMS(老年代并行收集器,基于标记清除算法,追求最小停顿时间);3. 整堆回收器:G1(整体上基于标记-整理算法,追求可预测的停顿)。总结:1. 新生代一般使用的复制算法,优先是效率高,缺点是内存利用率低;2. 老生代一般使用标记-清除/标记-整理算法。.

2020-06-06 14:58:50 1238

原创 jstack命令相关参数解释(tid,nid,prio,os_prio)

tid: java内的线程idnid: 操作系统级别线程的线程idprio: java内定义的线程的优先级os_prio:操作系统级别的优先级

2020-06-05 15:54:28 9695 1

原创 记JVM G1垃圾回收器启动打印

[GC pause (Metadata GC Threshold) (young) (initial-mark), 0.0090520 secs] [Parallel Time: 8.0 ms, GC Workers: 6] [GC Worker Start (ms): Min: 3877.5, Avg: 3877.5, Max: 3877.5, Diff: 0.0] [Ext Root Scanning (ms): Min: 1.0, Avg: 1.3, Max: 1.5, ...

2020-06-04 14:31:52 614

原创 记一次CPU利用率打满,频繁full GC

1.由于Htmlunit中会创建大量ScriptObject导致要求分配的新生代内存太多,而默认的新生代大小不够,导致出现担保失败,大量对象晋升到老年代,导致老年代打满,从而发生full gc。2. 处理:使用G1收集器;增大年轻代和堆的总大小;...

2020-06-03 22:35:08 475 1

原创 JVM晋升老年代总结

1. 担保机制当Survivor区的的内存大小不足以装下下一次Minor GC所有存活对象时,就会启动担保机制,把Survivor区放不下的对象放到老年代;2. 大对象直接放入老年代大对象(大小大于-XX:PretenureSizeThreshold的对象)直接在老年代分配内存;(只对Serial和ParNew收集器有效,对于Parallel Scavenge收集器无效)3.长期存活的对象进入老年代把age大于-XX:MaxTenuringThreshold的对象晋升到老年代;(对象每在

2020-06-03 21:05:47 1251 1

原创 JVM查看使用的何种垃圾收集器

List<GarbageCollectorMXBean> ls = ManagementFactory.getGarbageCollectorMXBeans(); for(GarbageCollectorMXBean b: ls){ System.out.println(b.getName()); }

2020-06-03 19:18:25 384

原创 springboot tomcat最大连接数、最大排队连接数、最大线程数设置

1. server.tomcat.accept-count=100连接数达到最大时,允许排队的最大连接数(Maximum queue length for incoming connection requests when all possible request processing threads are in use.),默认为100;2. server.tomcat.max-connections=8192最大连接数(Maximum number of connections that .

2020-05-27 17:54:52 3518

原创 JVM的Code Cache、Metaspace、Compressed Class Space

一、Code Cachejava代码在执行时一旦被编译器编译为机器码,下一次执行的时候就会直接执行编译后的代码,也就是编译后的代码被缓存了起来。Code Cache就是缓存编译后的代码的内存区域。另外,除了JIT编译的代码外,java使用的本地代码(JNI)也会存在Code Cache中。二、Metaspacejava8移除Permgen(永久代),使用Metaspace; 主要存储类的元数据,比如类的各种描述信息,类名、方法、属性、访问限制等,都按照一定结构存在metaspace里。...

2020-05-27 15:42:31 2658

原创 堆溢出VS栈溢出

一、抛出异常堆溢出:java.lang.OutOfMemoryError(OOM) 栈溢出:java.lang.StackOverflowError二、原因堆溢出:堆中对象大小大于堆的最大大小(往往可能时内存泄漏导致) 栈溢出:函数体内建立很大的数组 产生了死循环,循环调用 递归次数过多,需要保存大量的局部数据,知道递归结束才释放。...

2020-05-27 12:00:15 1471

原创 Minor GC, Major GC, Full GC

1. 对比Minor GC: 回收新生代空间内存(包括Eden区和Survivor区) Major GC: 回收老年代(Tenured)内存 Full GC: 回收新生代、老年代、原空间(metaspace)内存的全局范围GC2.触发条件Minor GC: Eden区满,触发Minor GC Full GC: (1) 调用System.gc时(建议系统执行Full GC,但是不是必然执行) (2) 老年代空间不足 (3) 方法区(永久代)空间不足 ...

2020-05-27 11:51:55 95

原创 VM选项和JVM参数

1. VM选项VM选项共有三种:-:标准VM选项,VM选项的规范 -X: 非标准VM选项,不保证所有VM支持 -XX:高级选项,高级特性,但属于不稳定的选项https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html2、常见JVM参数-Xmx(memory maxium):堆的最大内存数,等同于-XX:MaxHeapSize -Xms(memory startup):堆的初始化大小 -Xmn(memory n.

2020-05-27 11:23:04 1050

原创 MySQL存储引擎MyISAM和InnoDB

区别:1. InnoDB提供了对事务的支持;MyISAM不支持事务;2. InnoDB提供了行级锁和外键的约束;MyISAM不支持行级锁和外键;3. InnoDB数据和索引是集中存储的,ibd;MyISAM数据和索引是分开存储的,数据MYD,索引MYI4. InnoDB是聚簇索引,主键索引的叶子节点存储着行数据;MyISAM是非聚簇索引,叶子节点存储的是行数据地址,需要再寻址一次才能找到数据;5. InnoDB支持哈希索引;MyISAM不支持;6. InnoDB适合更新操作也很频繁,

2020-05-25 17:47:38 103

原创 锁膨胀(锁升级)总结

1. 是什么? 执行到synchronized关键字时,锁对象由偏向锁->轻量级锁->重量级锁的演化;2. 各阶段偏向锁:刚执行到Synchronized关键字时的锁对象为偏向锁(偏向第一个申请到它的线程)(通过CAS操作修改对象头里的锁标志位),当该线程执行完之后,锁不会被释放;当第二次执行到同步代码块时,线程会判断当前持有锁的线程是否就是自己(对象头里有持有锁的线程ID),若是则继续往下执行,不需要重新加锁;若不是,则会把偏向锁升级为轻量级锁。 轻量级锁: 当有第二个...

2020-05-25 15:09:44 1140

原创 springboot自动装配总结

1. 问题引入为什么springboot中整合其他框架,@EnableXXXXX就可以了呢?(小声BB,因为Springboot的自动装配)2. springboot启动类中有注解@SpringBootApplication,点进去之后我们可以看到三个关键注解:@SpringBootConfiguration(点进去可以发现其仍然被@Configuration修饰) @EnableAutoConfiguration @ComponentScan:扫描注解,扫描当前类下的package,比如被

2020-05-25 12:05:30 365

原创 HashMap深浅拷贝探究

1、先说结论(1)HashMap的clone和new HashMap(Map<? extends K, ? extends V> m)均为深拷贝;(2)直接使用=赋值为浅拷贝;2、源码验证 (1)new HashMap(Map<? extends K, ? extends V> m) public HashMap(Map<? extends K, ? extends V> m) { this.loadFactor = DEF..

2020-05-23 10:34:45 1203

原创 超线程技术(HT, HyperThreading)概述

超线程技术在一颗CPU上执行同时执行多个线程,但不它不像多个CPU那样,各自拥有独立的资源,即如果这多个线程对同一个资源发出请求,那么此时只有一个线程能得到资源,别的线程只能暂停。...

2020-05-22 17:25:14 711

原创 闭锁(CountDownLacth)使用及原理分析

1. CountDowmLatch是什么?CountDownLatch也叫闭锁,可以使得一个/多个线程等待闭锁打开后执行;2. 应用场景示例public class CountDownLatchTest { //闭锁 //主线程的闭锁 private static CountDownLatch main_cdl = new CountDownLatch(1); private static CountDownLatch sub_cdl = new Co.

2020-05-22 12:18:54 915

原创 Java数组拷贝:直接引用,clone,Array.copy,System.arraycopy对比

一、各方法简要介绍1.clone:是一个naive方法;2.System.arraycopy是一个naive方法3.Arrays.copy底层由System.arraycopy实现。public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength...

2020-04-02 17:22:41 597

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除