摘要: 题目描述 一个网站有 100 亿 url 存在一个黑名单中,每条 url 平均 64 字节。这个黑名单要怎么存?若此时随便输入一个 url, 你如何快速判断该 url 是否在这个黑名单中 ? 题目解析 这是一道经常在面试中出现的算法题。凭借着题目极其容易描述,电面的时候也出现过。 不考虑细节的话,此 阅读全文
posted @ 2019-06-30 13:48 murphy_gb 阅读(4216) 评论(0) 推荐(2) 编辑
摘要: 动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙 阅读全文
posted @ 2019-06-28 23:33 murphy_gb 阅读(3111) 评论(4) 推荐(1) 编辑
摘要: 我认为双指针技巧还可以分为两类,一类是 「快慢指针」 ,另一类是 「左右指针」 。前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环;后者主要解决数组(或者字符串)中的问题,比如二分查找。 一、快慢指针的常见算法 快慢指针一般都初始化指向链表的头结点 head,前进时快指针 fast 在前 阅读全文
posted @ 2019-06-26 07:53 murphy_gb 阅读(19559) 评论(4) 推荐(8) 编辑
摘要: 我周围的人几乎都认为二分查找很简单,但事实真的如此吗?二分查找真的很简单吗?并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的: Although the basic idea of binary search is comparatively straightforward, t 阅读全文
posted @ 2019-06-25 12:58 murphy_gb 阅读(232951) 评论(42) 推荐(136) 编辑
摘要: 前几天,发了一篇文章,介绍了一下 "JVM内存结构、Java内存模型以及Java对象模型之间的区别" 。其中,Java内存模型,是这三个知识点当中最晦涩难懂的一个,而且涉及到很多背景知识和相关知识。 网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中 阅读全文
posted @ 2019-06-22 21:45 murphy_gb 阅读(1274) 评论(0) 推荐(1) 编辑
摘要: Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文要讨论的 JVM内存结构 、 Java内存模型 和 Java对象模型 ,这就是三个截然不同的概念,但是很多人容易弄混。 首先,这三个概念是完全不同的三个概念。 阅读全文
posted @ 2019-06-22 08:46 murphy_gb 阅读(2886) 评论(0) 推荐(0) 编辑
摘要: 如果一个线程从头到尾执行完也不和别的线程打交道的话,那就不会有各种安全性问题了。但是协作越来越成为社会发展的大势,一个大任务拆成若干个小任务之后,各个小任务之间可能也需要相互协作最终才能执行完整个大任务。所以各个线程在执行过程中可以相互 ,所谓 就是指相互交换一些数据或者发送一些控制指令,比如一个线 阅读全文
posted @ 2019-06-19 20:24 murphy_gb 阅读(1097) 评论(5) 推荐(2) 编辑
摘要: 动态规划 1 概念 动态规划 算法是通过拆分问题,定义问题的状态与状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。在学习动态规划之前需要明确掌握几个重要概念。 阶段: 对于一个完整的问题过程,适当的切分为若干个相互联系的子问题,每次在求解一个子问题,则对应一个阶段,整个问题的求解转化为 阅读全文
posted @ 2019-06-18 22:05 murphy_gb 阅读(2727) 评论(1) 推荐(0) 编辑
摘要: 什么是重构? “重构”一词想必大家耳熟能详,就是整理代码呗,可事实上并不是这样的。重构旨在不改变调用者行为的前提下,对内部逻辑进行调整优化,从而提高其理解性,降低其修改成本。 何时重构? 重构并不是单独抽出时间集中处理的,而是当你想要做某个功能时,应该随手把需要重构的地方重构了。 怎么重构? 抽象重 阅读全文
posted @ 2019-06-16 10:14 murphy_gb 阅读(751) 评论(2) 推荐(2) 编辑
摘要: 进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。 1、计算机的核心是 CPU ,它承担了所有的计算任务。它就像一座 工厂 ,时刻在运行。 2、假定工厂的电力有限,一次只能供给一个车间 阅读全文
posted @ 2019-06-15 08:49 murphy_gb 阅读(420) 评论(0) 推荐(0) 编辑