摘要:设计Pastebin 让我们设计一个类似于web服务的Pastebin,用户可以在其中存储纯文本。该服务的用户将输入一段文本,并获得一个随机生成的URL来访问它。类似服务:pastebin.com,chopapp.com。难度等级:简单 1. Pastebin是什么? 类似于Pastebin的服务允
阅读全文
摘要:设计一个短链服务 让我们设计一个类似TinyURL的URL缩短服务。此服务将提供短别名重定向到长url。类似的服务:bit.ly, goo.gl, qlink.me等等。难度:简单 1. 为什么我们需要URL缩短? URL缩短用于为长URL创建更短的别名。我们称这些缩短的别名为“短链接”。当用户点击
阅读全文
摘要:并发 并发遇到的问题 读写冲突和写写冲突 计算机的发展从单核想多核发展,实现了真正的并行.当多个cpu中执行的线程试图同时去修改内存中的同一块地址的内容的时候,这个时候就出现了冲突读写冲突或者写写冲突.这个时候就需要一种同步机制来协调这些冲突. 内存可见性 cpu的执行速度比内存读取速度差很多,cp
阅读全文
摘要:

二分搜索算法 有序向量的二分搜索算法能够有效的加快查找的速度.从无序的 O(n)变为 有序的O(logn)演化. 二分法的实现 基础版 public int binarySearch(int[] nums, int target) { int lo = 0, hi = nums.length; wh
阅读全文
摘要:滑动窗口算法 名称 滑动窗口算法 场景 当遇到找出序列中连续子序列满足某些条件的问题的时候,可以使用滑动窗口. 序列包括:数组,字符串,List,链表等. 当我们遇到了求满足目标的连续子序列的时候,第一直觉适用滑动子窗口 解决方案 滑动窗口模板: //创建双指针 int left= start; i
阅读全文
摘要:#设计一个停车场 让我们为多层停车场做一个面向对象的设计 我们将涉及以下内容 1.系统需求 2.用例图 3.类图 4.活动图 5.代码 停车场是专门为停放车辆而开辟的空地。在大多数国家,汽车是主要的交通工具,停车场是每个城市和郊区的一个特点。购物中心、体育场馆、大型教堂和类似的场所通常都有大面积的停
阅读全文
摘要:双指针算法 在数组和链表中,有一些题可以适用双指针能有效帮助解决问题.方式有:两个指针相向而行,知道指针碰上;还有是快慢指针,快的指针追上慢指针. 使用双指针,能够有效提升系统性能,将时间复杂度n^2 降低到nlogn的方式. 一些技巧 链表双指针找到中间指针的前一个指针 中间节点: 1--> 2
阅读全文
摘要:uml uml是一种将程序的结构和逻辑进行可视化的工具. ##uml包括 用例图 用例图的结构 用例图是在需求定义以后,确定的需要交给计算机帮助完成的一个个的功能点. 用例图包括:参与者,用例,调用关系,扩展关系,系统边界 系统边界(SystemBoundary):当前系统和其他系统的边界,将所有的
阅读全文
摘要:设计模式是gof总结前人在书中or系统中大量反复使用过并取得成功的组织代码的方式. 设计模式的作者在保证内容准确的基础下尽可能简单的描述设计模式.设计模式整理出来的目的是便于理解 设计模式以名称 --> 问题 --> 解决方案 --> 效果的方式来描述设计模式. 设计模式是驾驭抽象型的技术.很多时候
阅读全文
摘要:Spring的生命周期 BeanDefinitaion 实例化 3.属性注入 4.Aware方法指向 5.BeanPostProcessor.prePostPrecessor() 6.InitializationBean接口指向 8.init-method()指向 9.BeanPostProcess
阅读全文
摘要:回溯算法是一种比较有用的算法工具.能够帮助我们解决三种问题:组合,子集,棋盘. 也许业务中有很多种不同的问题,基本都可以归类为这三种问题. 回溯问题可以理解为是一个回溯树,如果有一些问题没有解题思路,可以画出回溯树来帮助我们. 当在每一个节点的时候,都有两个选项:选择区间(已选择元素)+待选择区间.
阅读全文
摘要:#作为一名程序员,应该如何做管理 最近想做管理,做了一些阅读和思考.希望 选--> 用 --> 育 --> 励 --> 汰 如果想成为一个优秀的管理者或者经营者,我们需要想办法用好人.在这个前提中,我们需要知道我们应该做什么. 在几十人上百人的公司里,主管需要决策和判断.相对的员工主要关注的是公司的
阅读全文
摘要:nio相关 nio和epoll之间的关系 linux中是如何收发包的 分层 网络分为四层:应用层--> tcp层--> ip层 --> 数据链路层 --> 物理设备 和操作系统对应关系: 应用层 --> 用户进程 tcp层,ip层 --> 内核进程 数据链路层 --> 网络设备驱动程序 存放于(dr
阅读全文
摘要:在业务场景中,我们的数据会存放在多种空间中,也需要在多种空间中传输来实现系统的功能以及保证系统的安全性. 数据存放的空间有:内核缓冲区,用户空间,磁盘,网络缓冲区. 其中网络缓冲区,磁盘的数据是有设备驱动来实现的.其中设备和内核缓冲区的访问可以使用cpu来发送指令也可以适用DMA技术帮助实现数据的传
阅读全文
摘要:git 起步 为什么要使用版本控制 当我们在工作的时候,通过很多次迭代对当前文档工作进行优化.这个过程是一个反复修改的过程,我们需要回到之前的某次修改.这个时候我们就希望有一个工具能够把每次修改的状态记录下来. 版本控制系统 本地版本控制系统 一种实现方式是是使用复制文件的方式,当到某个时间点的时候
阅读全文
摘要:zookeeper是什么? zk是一个分布式的,容错的通用的协调服务.这个协调的含义是:在分布式系统中,有多个节点,当多个节点对一些信息认知不一致的时候需要一个服务来做协调,给出最终答案.zk就扮演了这个服务. zk提供了很多功能,最常用的就是:metaData stage;Endpoint Dis
阅读全文