- 博客(67)
- 资源 (1)
- 收藏
- 关注
原创 数据结构与算法之美——链表
如何优雅的写出链表代码?6大学习技巧一、理解指针或引用的含义1.含义:将某个变量(对象)赋值给指针(引用),实际上就是就是将这个变量(对象)的地址赋值给指针(引用)。2.示例:p—>next = q; 表示p节点的后继指针存储了q节点的内存地址。p—>next = p—>next—>next; 表示p节点的后继指针存储了p节点的下下个节点的内存地址。二、警惕指针丢失和内存泄漏(单链表)1.插入...
2019-10-12 15:01:08
1251
原创 学习链表
1.如何分别用链表和数组实现LRU缓冲淘汰策略?1)什么是缓存?缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。2)为什么使用缓存?即缓存的特点缓存的大小是有限的,当缓存被用满时,哪些数据应该被清理出去,哪些数据应该被保留?就需要用到缓存淘汰策略。3)什么是缓存淘汰策略?指的是当缓存被用满时清理数据的优先顺序。4)有哪些...
2019-10-10 16:55:44
1195
原创 秒杀系统的设计五大原则
最近订阅了 极客时间 | 如何设计一个秒杀系统,这里是每章的学习笔记。链接:如何设计一个秒杀系统 架构原则:4要 1 不要!1、数据要尽量少。2、请求数要尽量少。3、请求路径要短。4、依赖要尽量少。5、不要有单点。 数据要尽量少:1. 是指用户请求的数据能少就少,请求包括给系统发的request 及 response 。因为 这些 request 和 r...
2018-11-21 21:32:53
772
原创 mysql uftb8mb4 储存 emoji 表情失败
记一次生产事故踩坑。血淋淋的惨痛教训众所周知 mysql 存 emoji 表情要用 utf8mb4 这个字符集OK 没问题,设置 nick_name 为 utf8mb4 varchar(50)测试的结果: emoji 表情储存成功没有问题 完全oj8k 发生产! 微信公众号做了推送,为了抗住流量,还准备了100台服务器。晚上监控流量,服务器各项指标正常。但...
2018-10-22 15:06:57
1282
原创 Java 编码代码规范
1、HttpServletRequest 等 常用参数 要放到 参数列表的最前面,自定义的参数实体靠后放2、变量名要符合规范,通俗易懂,例如:记录日志的字符串 就叫 logMessage,不要叫或者加什么str 了。3、凡是出现数字或者字符串的地方,考虑这些数字和字符串能否放到一个 接口实体里去,这样代码检测的时候不会报一下 魔法数字之类的错误。4、把一个 实体的值 传到另一个实体的...
2018-07-24 17:41:21
315
原创 前后端配合小结
后台返回的 json 数据 字段最好只有三种, status , message, data.具体情况如下:如果请求的结果是 success的,不论调用的接口返回何种报错 都是 success ,结果的报错 直接透传到 前端,让前端的同学去处理,后端不要做任何处理。此时返回 status、 message 、 data。 如果请求的结果的 fail 的, 比如调用接口时返回异常了...
2018-07-24 17:25:11
879
原创 分布式环境下的解决方案——分布式锁
分布式锁,也就是在多进程情况下的锁。 多进程的锁 跟 多线程的 锁 有什么相同的地方呢? 需要有存储锁的空间,并且锁的空间是可以访问到的。 锁需要被唯一标识。 锁要有至少两种状态。 储存空间:锁是一个抽象的概念,锁的实现,需要依存于一个可以存储锁的空间。在多线程中是内存,在多进程中是内存或者磁盘。更重要的是,这个空间是可以被访问到的。多线程中,不同的线程都可以访问到堆...
2018-07-23 21:56:23
878
原创 深入理解 CAS 及 ABA问题
CAS,Compare And Swap,即比较并交换。CAS是Atomic 包的核心,更是整个J.U.C 包的 基石。 本文 将通过AtomicInteger这个类,来分析是如何通过CAS来保证 Atomic的原子性的。直接进入 AtomicInteger 这个类,可以看到AtomicInteger 中定义了一个变量value并且用 valatile来修饰的, 还有个静态...
2018-07-23 21:56:16
1534
原创 JUC之 底层核心AQS
AQS,AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等) AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = 0时表示释放了锁。它提供了三个方法(getState()、...
2018-07-23 21:56:11
828
原创 ReentrantLock 的实现原理
AQS的功能可以分为独占和共享,ReentrantLock实现了独占功能。ReentrantLock实现了Lock接口,加锁和解锁都需要显式写出,注意一定要在适当时候unlock。 ReentrantLock对比synchronized和synchronized相比,ReentrantLock用起来会复杂一些。在基本的加锁和解锁上,两者是一样的,所以无特殊情况下,推荐使用sy...
2018-07-23 21:56:03
1342
原创 redis 实现分布式锁的演进
在分布式系统中,常常会遇到一些要使用分布式锁的业务场景。比如说:每分钟要执行关闭未支付订单的定时任务,在集群的环境下,如果不做处理,每台服务器都会去执行这个定时任务,显然每个时间段的定时任务只需要执行一次,并不需要每台服务器都去执行,使用分布式锁来控制让单台服务器来执行这个定时任务 势在必行实现分布式锁的方式有很多,zookeeper,数据库,或者是其它手段都可以,本文着重分析使用re...
2018-05-21 11:21:41
564
原创 集群 跟 分片 有什么区别
我们在谈到 服务器多实例的时候,常常会说到 Tomcat 集群 ;但为什么 谈到 多实例 redis 的时候 没有说 redis 集群 呢?是因为 类似Tomcat 这样的 集群 强调的是 机器提供的 服务 而 redis 这样的 “集群” 强调的是 数据 ,(因为redis 主要是来存数据的嘛)将数据分为一片一片的区域,就称为分片,是不是很形象?所以 redis 集群 一般会...
2018-05-17 20:00:19
4909
2
原创 zookeeper的zab协议工作原理之 崩溃恢复模式
上篇 zookeeper的zab协议工作原理之 原子广播 介绍了 zookeeper 广播的原理。下篇 来详细的讲解 崩溃恢复模式 的原理一、什么情况下zab协议会进入崩溃恢复模式? 1、当服务器启动时 2、当leader 服务器出现网络中断,崩溃或者重启的情况 3、当集群中已经不存在过半的服务器与Leader服务器保持正常通信。二、zab协议进入崩溃恢复模式会做什么? 1、...
2018-04-09 22:02:52
3961
1
原创 zookeeper的zab协议工作原理之原子广播
说zab协议之前必须提一下 paxos 协议 paxos协议主要就是如何保证在分布式环网络环境下,各个服务器如何达成一致最终保证数据的一致性问题ZAB协议,基于paxos协议的一个改进。zab协议为分布式协调服务zookeeper专门设计的一种支持崩溃恢复的原子广播协议zookeeper并没有完全采用paxos算法, 而是采用zab Zookeeper atomic broadcast zab协议...
2018-04-09 10:41:57
1669
原创 zookeeper的选举机制
一、Zookeeper选举机制Zookeeper虽然在配置文件中并没有指定master和slave但是,zookeeper工作时,会选出一个节点为leader,其他则为follower下面来聊聊是如何选出leader的。leader选举的算法有三种:leaderElection/AuthFastLeaderElection/FastLeaderElection其中FastLeaderElectio...
2018-04-08 21:05:57
633
原创 如何用zookeeper 实现分布式锁
一、分布式锁介绍 分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。二、分布式锁设计原理图1、基于排它锁:让所有的客户端(A B C)都在指定的Locks节点下 创建一个同名的节点lock,利用ZK 节点名称的唯一性来做限制, 谁创建成功了谁就获取到了锁,否则就是没有获取到。这种设计比较简单2、基于共享锁:1、在当前节点下创建临时...
2018-04-08 20:48:59
511
原创 详解zookeeper的配置文件
zoo.cfg配置文件分析tickTime=2000 zookeeper中最小的时间单位长度 (ms) initLimit=10 follower节点启动后与leader节点完成数据同步的时间 syncLimit=5 leader节点和follower节点进行心跳检测的最大延时时间 dataDir=/tmp/zookeeper 表示zookeeper服务器存储快照文件的目录 dataLogD...
2018-03-29 10:16:55
2218
原创 动物园园长 zookeeper
zookeeper是一个开源的分布式协调服务中间件zookeeper能做什么?数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、命名服务、 master选举(kafka、hadoop、hbase)、分布式队列、分布式锁zookeeper的特性:顺序一致性:从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中原...
2018-03-27 11:54:51
841
原创 分布式相关基础理论
分布式环境下面临的问题:网络通信:网络本身的不可靠性,因此会涉及到一些网络通信问题三态:分布式架构里面,除了成功、失败、超时分布式事务 :ACID特性中心化和去中心化:冷备或者热备经典的CAP/BASE理论CAP C(一致性 Consistency): 所有节点上的数据,时刻保持一致 A可用性(Availability):每个请求都能够收到一个响应,无论响应成功或者失败...
2018-03-27 11:42:54
860
原创 什么是Restful
Restful 一直都在听,一直都在用,但就是搞不懂什么是restful,因为说不出个所以然出来。为什么说一直都在用呢,我们随便打开一个大型网站的网址,基本都是 restful 风格的 。比如:http://www.imooc.com/course/programdetail/pid/31restful有什么用呢?使用web标准来做一个准则和约束。RESTful的基本概念 1.在...
2018-03-22 11:45:02
469
原创 HTTP 通信协议
首先我们看看URL 跟 URI 有什么区别。URI 指的是 服务器 资源的名字。 来看看什么是URI https://www.zhihu.com/question/44323871/answer/347628315 这个地址是知乎上的一个问题,/question/44323871/answer/347628315 这个问题作为知乎的一种资源。 其中 /question/443...
2018-03-22 11:33:53
363
原创 为什么会要序列化
对 java对象的传输 是通过网络的 。然后网络都是通过字节传输的 所以需要用序列化的方式 将java对象转化为 字节,然后网络那头的接受端,拿到收到的字节 再反序列化出来一个对象,用来保证 java的对象能够跨进程传输。总结了一下 序列化的几个要点: 1.在java中,只要一个类实现了java.io.Serializable接口,那么它就可以被序列化 2.通过ObjectOutputSt...
2018-03-21 21:19:36
640
原创 java socket 与 网络协议
本问是介绍 java socket 跟 网络协议的一些东西,因为分布式的情况下, 进程跟进程肯定是通信的嘛。 先从基础的地方开始写起。 这是博主直接写过 关于 两篇 关于 TCP / IP 的博客 TCP IP 里的网络请求 到底是什么样的? 聊聊TCP传输的滑动窗口协议的演进...
2018-03-16 17:57:50
428
原创 TCP IP 里的网络请求 到底是什么样的?
当我输入 一个url 在浏览器的地址栏按下回车 这个以前也写过博客了:一次URL输入域名按下回车到底发生了什么?今天聊聊 传输层 在中间做了什么事:如果我输出 慕课网 的网址:www.imooc.com首先我会去请求 慕课网的 ip 地址: 我请求的的数据包入下图:如图所示: 第一行是我电脑发出去 数据链路层的数据包。第二行 是 笔记本的 mac 地址 ,请求会请求...
2018-03-16 14:26:57
560
原创 再回广联
2018.3.13日晚上,翔哥邀请我给我上课,我就再回广联走了一趟。再回广联,感触颇深。 熟悉的工位,熟悉的人,哦不对,熟悉的陌生人。虽然走了大半年,但有的记忆还是很新的。虽然公司的发展一直磕磕绊绊,但我还是很感激有这么一个机会曾经接纳过我的地方。起点低,不可怕,因为我喜欢挑战,起点越低我做好后就越有成就感。经常晚上很晚了还在一个人学习,周末同样如此,我更喜欢周末在公司学习。...
2018-03-14 20:08:14
260
原创 分布式锁的实现方式
分布式锁跟 我们 平时用 的synchronized 锁 本质是都是锁。 不同的是:synchronized是 java提供的锁。 是java进程进行多线程控制时的锁。 用 分布式锁 的原因是,多个应用是不同的进程下运行的,显然用java 提供的 锁就不行了。说说三种分布式锁的机制。 第一种,用数据库来做。有一个 专门的 lock tabl...
2018-03-12 20:02:02
325
原创 volatile和synchronized 实现原理的差别
提到volatile 和 synchronized 的时候不得不提到的一个东西就是JMM(java Memory Model)java内存模型。因为在并发的过程中 经常要处理一些 可见性 、 原子性 、 有序性的问题。并发编程中的两个关键问题是: 线程之间是 如何通信的。这又分两种情况: 1、共享内存 ——— 隐式通信 volatile 2、 消息传递 ——— 显示通信...
2018-03-07 21:47:06
2120
原创 如何控制线程的执行顺序
控制线程的执行顺序有两种办法,通常来说,最简单的就算用Thread类提供的API,使用join方法即可。其使用方法及原理:深入理解join方法的底层原理 还有一个方法就是使用:ExecutorService 这个类提供的方法,看伪码:static ExecutorService executorService = Executors.newSingleThreadExecutor();...
2018-03-07 20:53:39
1179
原创 深入理解join方法的实现原理
有一道面试题是: 如何控制多线程的执行顺序;线程的代码就不贴了。上伪码好了:main(){thread1.start();thread1.join();thread2.start();thead2.join();thread3.start();}有几个方法都可以做到,这里主要是套路最简单的使用join方法,如何解决。 首先看join方法的API 这是随手百度的 ...
2018-03-07 16:33:30
3374
原创 聊聊TCP传输的滑动窗口协议的演进
写这篇文章前,我有些肺腑之言想感谢一下我的微信好友“风大”。 是他给了我信心,原来没有很难的技术,只要你肯努力总能赶上其他人。 后来关注他的博客后,发现他尽然觉得弄懂hashmap的 最好办法是自己实现一个hashmap。一开始我也是不懂为什么要这样,后来发现读懂hashmap之后,再自己实现的时候,刚好可以读懂hashmap中那些设计巧妙的地方,发现自己与大师的差距。最后我也总结了一...
2018-03-05 22:52:10
317
原创 再谈session 和 cookie的差异
我们都知道 session是存储在服务器端的,cookie是存储在客户端的;他们两者之间又有什么联系呢?这点要先从HTTP先说起。HTTP协议是一种无状态的 通信协议 。那么这就以为着 客户端按道理是需要每次请求之前都要和服务器做连接的。 但是每次都进行这种连接,会非常耗时,并且这些重复的网络请求的意义都不大,所以如何避免这些重复的工作就成为了聪明人们发挥聪明的地方了。cookie的...
2018-03-05 21:18:58
214
原创 源码分析 spring事务处理机制
Spring在TransactionDefinition接口中定义这些属性,以供PlatfromTransactionManager使用, PlatfromTransactionManager是Spring事务管理的核心接口。接口代码如下: public interface TransactionDefinition { int getPropagationBehavior(); //返...
2018-03-02 21:26:09
408
原创 为什么redis 是单线程的?
以前一直有个误区,以为:高性能服务器 一定是 多线程来实现的 原因很简单因为误区二导致的: 多线程 一定比 单线程 效率高。其实不然。在说这个事前希望大家都能对 CPU 、 内存 、 硬盘的速度都有了解了,这样可能理解得更深刻一点,不了解的朋友点:CPU到底比内存跟硬盘快多少redis 核心就是 如果我的数据全都在内存里,我单线程的去操作 就是效率最高的,为什么呢,因为多线程的本质就是 CP...
2018-02-26 21:38:17
12831
9
原创 如果进入CPU的世界,时间会是怎样的?
每个人都会有一些吐槽的想法存在,我替CPU把它的吐槽 放在我的博客里吧!不知道大家有没有感觉每天写代码的时间过得很快啊,有时候一天过去了一个功能还没完成,但是时间就这么没了!但是你知道CPU有多少苦水吗? 且听 CPU 慢慢的倾诉......让我们看看什么是CPU的世界:CUP是电脑的心脏,CPU决定了这台电脑的上限。而决定CPU工作频率的是主频。我的笔记本是 16年买的,主频好像是 2.6GHz...
2018-02-26 20:52:46
3157
5
原创 <二>深入理解Threadlocal 关于内存泄漏的思考
不知道经常使用 Threadlocal 的朋友有没有意识到内存泄漏这一点。什么是内存泄漏呢?对象已经没有在其它地方被使用了,但是垃圾回收器没办法移除它们,因为还在被引用着。我不用的对象,又不能被垃圾回收,就会造成内存泄漏。不了解垃圾回收的朋友看这篇文章:垃圾回收的细节简单的拿个图表示下:如果你了解垃圾回收机制,活着看过周志明老师的 深入理解java虚拟机 第二版, 你肯定 知道强,软,弱,虚。...
2018-01-22 11:16:20
1035
1
原创 <一>深入理解Threadlocal的实现原理
文章开头我想说,这是一篇面向不怎么懂 Threadlocal 的朋友的博客,所以有的人会觉得有点啰嗦,但不论您水平高低,相信耐着性子看完也一定会有收获。上次去深圳的一家大型的互联网金融公司面试,就被问到了 Threadlocal , 当时只是在代码里看到过用它来管理session。第一次看到的时候,当时觉得这么高深的东西还是以后去研究吧,结果就是面试官的一脸鄙视。。。花了一天时间好好看了一下源码...
2018-01-21 16:00:52
524
原创 为什么要用分布式架构,又为什么要用微服务?
上次面试时经常被问到一个问题,你为什么要用dubbo?由于经验尚浅,实在是没说得明明白白。我用了dubbo后,我就可以这样调接口,巴拉巴拉,说到底还是争不过面试官问:那照你这么说,我不用分布式架构也可以完成啊,你只是说了用了分布式架构后业务处理的方法,并没有弄懂里面的原因。结果自然是。。。。。。。给了offer,没去简要的分析一下单体架构的优缺点,再说说用了分布式架构后会遇到的问题
2018-01-20 14:43:31
23572
7
原创 写一个自己的springMVC?
今天我们来实现一个简单的springMVC框架,可以理解为 springMVC1.0这个版本,只是功能比较简单而已;废话不多说,进入正题;先看看springMVC的简单流程;我们请求的地址会被dispatchservlet这个springMVC的核心拦截器拦截,然后dispatchservlet会找到我们想要的那个controller里的那个方法,并调用。但是dispa
2017-09-27 22:37:27
1571
2
原创 SpringMVC实现原理
今天我们来实现一个简单的springMVC框架,可以理解为 springMVC1.0这个版本,只是功能比较简单而已;废话不多说,进入正题;先看看springMVC的简单流程;我们请求的地址会被dispatchservlet这个springMVC的核心拦截器拦截,然后dispatchservlet会找到我们想要的那个controller里的那个方法,并调用。但是dispatchServlet不是人,...
2017-09-27 20:23:27
5630
原创 一致性Hash算法
很早的时候就听过这个算法,也搜过相关的博客,但一直没搞懂这个算法是用来干嘛的;现在的公司面试的时候CTO跟我聊了一下hashcode紧接着问我对一致性hash有没有了解,去随手记面试时,面试官也问了一致性hash,面试的时候都没答出来,面完用手机查了一下一致性hash,看到很多人拿那个圈做比喻也一下子没看懂;直到入职后,有天中午跟CTO一起吃饭,又问了他如何去理解一致性hash, 当时CTO解释了
2017-08-24 00:51:05
680
实现简单springMVC的源码
2017-09-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人