
高并发、数据结构、系统、源码分析
火锅技术栈
我不能保证写的每个地方都是对的,但是至少能保证每一句话、每一行代码都经过了认真的推敲、仔细的斟酌。每一篇文章的背后,希望都能看到自己对于技术、对于生活的态度。
我相信乔布斯说的,只有那些疯狂到认为自己可以改变世界的人才能真正地改变世界。面对压力,我可以挑灯夜战、不眠不休;面对困难,我愿意迎难而上、永不退缩。
其实我想说的是,我只是一个程序员,这就是我现在纯粹人生的全部。
展开
-
JVM问题排查基本思路分析
Story background 回望2018年12月,这也许是程序员们日夜不得安宁的日子,皆因各种前线的系统使用者都需要冲业绩等原因,往往在这个时候会向系统同时写入海量的数据,当我们的应用或者数据库服务器反应不过来的时候,就会产生各种各样诡异的问题,诸如表现出来就是系统变得巨卡无比,无法使用,或者周期性卡顿,令人发指,用户轻则问候系统全家,重则心脏病发。总而言之每天都脑壳疼!归根到底是我们的应用服务器或数据库服务器因为扛不住流量造成的系统BUG问题暴露,诸如OOM等,呈现出机器的三高,这里说的三高并原创 2020-10-20 10:44:22 · 645 阅读 · 1 评论 -
I/O模型以及多路复用三种实现方式select、poll和epoll比较及区别
I/O过程:图图中明显忽略了很多细节,仅显示了涉及到的基本步骤。 注意图中用户空间和内核空间的概念。用户空间是常规进程所在区域。JVM 就是常规进程, 驻守于用户空间。用户空间是非特权区域:比如,在该区域执行的代码就不能直接访问硬件设备。 内核空间是操作系统所在区域。内核代码有特别的权力:它能与设备控制器通讯,控制着用户区域 进程的运行状态,等等。最重要的是,所有 I/O 都...原创 2019-11-26 15:29:02 · 2918 阅读 · 0 评论 -
阿里、腾讯、百度、华为、京东、搜狗和滴滴最新面试题汇集
前一段时间和大牛们交流了一下,据反馈现在Android岗位也没有以前那么多了,没这么好找了,面临2016年寒冬季节,大量公司模仿O2O模式导致死掉企业的很多,在加之培训机构大量的培训人,导致供大于求,当然这不意味着饱和,只是市场更趋于合理一些(只要技术好不用怕的)。最近结合一些面试的同学和大牛们(张旭童)反馈,前几天听童哥去阿里面试顺便整理了下一些面试题目。希望对大家有所帮助,后期会不断更新添加新...原创 2018-01-15 11:38:34 · 740 阅读 · 0 评论 -
二叉树之B树红黑树AVL树堆积树、B-树、B+总结分析
二叉树了解B树、红黑树、AVL树B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的原创 2017-09-28 22:22:24 · 1228 阅读 · 0 评论 -
Java实现代码-链表
如下代码:package 数据结构;class node { node next; int data; public node(node next, int data) { super(); this.next = next; this.data = data; } public String toString() { return "next:" + next +...原创 2018-03-15 13:28:25 · 2257 阅读 · 0 评论 -
算法的时间与空间复杂度
算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。那么我们应该如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。 时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。 空间维度:是指执行当前算法需...原创 2018-11-25 12:01:35 · 1253 阅读 · 1 评论 -
链表常用函数(java实现)
废话少说,上链表的数据结构class ListNode { ListNode next; int val; ListNode(int x){ val = x; next = null; }}1.翻转链表ListNode reverse(ListNode node){ ListNode prev = ...原创 2018-11-27 22:47:04 · 3455 阅读 · 0 评论 -
简单设计一个高并发的系统
问题如何设计一个高并发系统?分析说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,...原创 2019-01-05 21:10:45 · 1414 阅读 · 1 评论 -
BIO,NIO,AIO 总结
熟练掌握 BIO,NIO,AIO 的基本概念以及一些常见问题是你准备面试的过程中不可或缺的一部分,另外这些知识点也是我们学习 Netty 的基础。文章目录BIO,NIO,AIO 总结 1. BIO (Blocking I/O) 1.1 传统 BIO 1.2 伪异步 IO 1.3 代码示例 1.4 总结 2. NIO (New I/O) 2.1 NI...转载 2019-02-23 14:45:48 · 1702 阅读 · 0 评论 -
Linux IO模式及select、poll、epoll实现nio详解
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。转自:https://segmentfault.com/a/1190000003063859同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO...原创 2019-04-21 12:27:19 · 5586 阅读 · 1 评论 -
淘客链接转成正常淘宝链接JAVA代码实现
更新1:2018/1/15类似于 https://s.click.taobao.com/t?e=m%3D2%26s%3DshhycMgyX5YcQipKwQzePOeEDrYVVa64K7Vc7tFgwiHjf2vlNIV67gtlG6lwPBS0UkCu4LW4fHWggE%2B81xYdaYgwvAJKzKRhR0QUH89hs6odoD3G8jExAxAqvUhwaPOiypAb原创 2017-12-20 16:29:38 · 14308 阅读 · 1 评论 -
生活中的死锁例子及解决办法
1. 有两条道路双向两个车道,即每条路每个方向只有一个车道,两条道路十字交叉。假设车辆只能向前直行,而不允许转弯和后退。如果有4辆车几乎同时到达这个十字路口,如图(a)所示;相互交叉地停下来,如图(b),此时4辆车都将不能继续向前,这是一个典型的死锁问题。从操作系统原理的资源分配观点,如果4辆车都想驶过十字路口,那么对资源的要求如下: l 向北行驶的车1需要象限a和b;原创 2017-12-28 15:50:26 · 5513 阅读 · 0 评论 -
dubbo学习教程
一、前言部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下。整理这篇文章差不多花了两天半时间,请尊重劳动成果,如转载请注明出处http://blog.youkuaiyun.com/hzzhoushaoyu/article/details/43273099二、什么是du转载 2017-12-22 11:09:21 · 728 阅读 · 0 评论 -
JVM堆模型
JVM堆(Heap)= 新生代(Young) + 旧生代(Tenured)新生代(Young)= Eden区 + Survivor区 堆/HeapJVM管理的内存叫堆;在32Bit操作系统上有4G的限制,一般来说Windows下为2G,而Linux下为3G;64Bit的就没有这个限 制。 TLAB:JVM所占用的主要内存都是从堆空间分配的,堆是所有线原创 2017-08-19 14:40:14 · 445 阅读 · 0 评论 -
如何做一个对账系统
在互联网行业中只要涉及到支付,必然就会有对账的需求,几乎所有互联网公司的业务中多多少少的都会涉及到支付,大一点的公司甚至都标配有了自己的第三方支付公司,因此对账具有普遍性。对账系统是支付体系中最重要的一环,也是保证交易、资金安全的最后一道防线。在大多数的互联网公司中,一般都会有独立的对账系统来处理,比如:电商平台、互联网金融、第三方支付公司等。对账是支付系统中的一环,因此在对账前我们先了解...原创 2017-09-21 15:44:07 · 652 阅读 · 0 评论 -
JAVA工程师面试笔试必问题目--包含JAVA 基础JVM操作系统网络架构设计分布式算法数据等
JAVA 基础1. JAVA 中的几种基本数据类型是什么,各自占用多少字节。2. String 类能被继承吗,为什么。3. String,Stringbuffer,StringBuilder 的区别。4. ArrayList 和 LinkedList 有什么区别。5. 讲讲类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,当 new原创 2017-09-30 19:31:51 · 2023 阅读 · 0 评论 -
Java多线程问题总结
前言Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作原创 2017-10-01 10:43:32 · 3697 阅读 · 0 评论 -
分布式锁的多种实现
目前几乎所有的大型web应用全都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式应用中的CAP理论告诉我们:任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)、分区容错性(Partation tolerance)。最多只能同时满足其中两项。所以在设计之初,就需要对三者做出取舍。一般在互联网场景中,都会选择牺牲...转载 2017-10-01 20:00:56 · 1119 阅读 · 0 评论 -
分布式锁的三种实现方式
一、zookeeper1、实现原理:基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站)。大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机原创 2017-10-01 20:04:21 · 5807 阅读 · 0 评论 -
Java 并发编程:volatile的使用及其原理
http://www.cnblogs.com/paddix/p/5428507.html一、volatile的作用 在《Java并发编程:核心理论》一文中,我们已经提到过可见性、有序性及原子性问题,通常情况下我们可以通过Synchronized关键字来解决这些个问题,不过如果对Synchronized原理有了解的话,应该知道Synchronized是一个比较重量级的操作,翻译 2017-09-27 21:57:20 · 5018 阅读 · 0 评论 -
java实现K叉树及递归和非递归遍历算法
如下代码import java.util.Stack;/** * * @author Administrator * */class treenode { private int data; private treenode[] kNode; public treenode(int data) { super(); this.data = data;原创 2017-10-16 22:38:48 · 1139 阅读 · 0 评论 -
Java高并发解决方案
对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题,但话又说回来了,既然逃避不掉,那我们就坦然面对吧~今天就让我们一起来研究一下常见的并发和同步吧。为了更好的理解并发和同步,我们需要先明白两个重要的概念:同步和异步1、同步和异步的区别和联系 同步,可以理解为在执行完一个函原创 2017-11-17 15:41:55 · 4023 阅读 · 0 评论 -
Java处理线程同步/线程安全的方式概述
1.同步方法 即有synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。2.同步代码块 即有synchronized关键字修饰的语句块。 被该关键字修饰的语句块会自动被加上内置锁,从而实现同步3.原创 2017-09-15 18:02:14 · 1145 阅读 · 0 评论