自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [Leetcode] 常见题目汇总

算法高频题汇总 —— 链表高频题汇总 —— 树高频题汇总 —— 栈 & 队列 & 堆高频题汇总 —— 动态规划之字符串设计

2019-08-20 10:57:11 568

原创 互联网 Java 工程师进阶知识扫盲

高并发架构缓存在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?Redis 和 Memcached 有什么区别?Redis 的线程模型是什么?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?Redis 都有哪些数据类型?分别在哪些场景下使用比较合适?Redis 的过期策略都有哪些?手写一下 LRU 代码实现?如何保证 Redis 高并发、高可用?Re...

2019-08-11 15:44:41 283

原创 [Java 面试突击训练] SQL 优化策略

执行计划的字段idid 相同,执行顺序由上至下id 不同,如果是子查询,id 的序号会递增,id 值越大优先级越高,越先被执行id 相同、不同都存在,则相同的时一组,由上至下顺序执行,所有组中,id 值越大越先执行select_type类型描述SIMPLE简单的select查询,不包含子查询或者unionPRIMARY查询中若包含任何复杂的子部分,最外...

2020-08-17 21:45:51 145

转载 [Java 面试突击训练] 在项目中缓存是如何使用的?缓存如果使用不当会造成什么后果?

面试题项目中缓存是如何使用的?为什么要用缓存?缓存使用不当会造成什么后果?面试官心理分析这个问题,互联网公司必问,要是一个人连缓存都不太清楚,那确实比较尴尬。只要问到缓存,上来第一个问题,肯定是先问问你项目哪里用了缓存?为啥要用?不用行不行?如果用了以后可能会有什么不良的后果?这就是看看你对缓存这个东西背后有没有思考,如果你就是傻乎乎的瞎用,没法给面试官一个合理的解答,那面试官对你印象肯...

2020-06-11 15:47:24 215

原创 [算法分析] (二)最坏,平均,最好情况

在上一节中,我们讨论了渐进分析是如何解决算法的朴素分析问题的。在本节中,我们以线性搜索为例,通过渐进分析来研究这个算法。我们通过三种情况来分析一个算法:最坏情况平均情况最佳情况我们来看线性搜索的代码实现public class GFG { static int search(int[] arr, int n, int x) { int i; for (i = 0; i &...

2019-12-15 17:47:44 2652

原创 [算法分析] (一)渐近分析

为什么要提到渐进分析?我们有许多需要关心的方面,像是用户友好性,模块性,安全性,可维护性等等。为什么要关心性能?答案很简单,没有性能一切免谈。性能就像货币,我们可以通过它买到上述所有的东西。研究性能另一个原因是 —— 速度充满乐趣!归根结底,性能就是指规模。想象一下一个文本编辑器能载入 1000 页,却只能每分钟检查 1 页的语法,又或者一个图像编辑器需要花 1 小时把你的图片向左旋转 90...

2019-12-04 12:09:43 2276

原创 [Java 面试突击训练] 常用英文面试词汇

Object-Oriented Programming中文英文发音封装encapsulation[ɪn,kæpsə’leɪʃən]继承inheritance[ɪn’herɪt(ə)ns]多态polymorphism[,pɒlɪ’mɔːfɪz(ə)m]耦合coupling['kʌplɪŋ]内聚cohesion[kə(ʊ)'hiːʒ(...

2019-09-07 22:41:52 304

原创 [Java 面试突击训练] 常用设计模式

Iterator(迭代器模式)登场角色Iterator(迭代器)该角色负责定义按顺序逐个遍历元素的接口。在示例程序中,由 Iterator 接口扮演这个角色,它定义了 hasNext(是否存在下一个元素) 和 next(获取该元素) 两个方法。ConcreteIterator(具体的迭代器)该角色负责实现 Iterator 角色所定义的接口。在示例程序中,由 BookShelfIte...

2019-09-03 19:11:39 202

转载 [Java 面试突击训练] 一些 Java 基础面试题

前言这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题。你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Java 知识,但这些问题都是容易在各种 Java 面试中被问到的,都很难回答全面。具体问题为什么等待和通知是在 Object 类而不是 Thread 中声明的?这个问题的好在于它能反映了面试者对等待通知机制的了解,以及他对此主题的理解是否明...

2019-09-01 18:44:59 913 1

原创 [Java 面试突击训练] MyBatis 架构分析

MyBatis 整体架构基础支持层类型描述反射模块对Java原生的反射进行了良好的封装,提供了更加简洁易用的 API,方便上层调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。类型转换模块Mybatis 为简化配置文件提供了别名机制,是类型转换模块的主要功能之一。另一个功能是实现 JDBC 类型与 Java 类型之间的转换,该功能...

2019-08-29 15:44:32 154

原创 [Leetcode] 高频题汇总 —— 栈 & 队列 & 堆

下一个更大元素 I给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例输入:nums1 = [4,1,2], nums2 = [1,3,4,...

2019-08-29 15:40:41 251

原创 [Leetcode] 高频题汇总 —— 树

路径总和 II给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。解题思路解法一:用深度优先算法DFS的思想来遍历每一条完整的路径,需要用到二维的vector,而且每当DFS搜索到新节点时,都要保存该节点。而且每当找出一条路径之后,都将这个保存为一维vector的路径保存到最终结果二位vector中。并且,每当DFS搜索到子节点,发现不是路径和时,返回上一个结...

2019-08-29 15:40:28 490

原创 [Leetcode] 高频题汇总 —— 链表

前言链表是一种常见的线性数据结构。对于单向链表,每个节点有一个 nextnextnext 指针指向后一个节点,还有一个成员变量用以存储数值;对于双向链表,还有一个 prevprevprev 指针指向前一个节点。与数组类似,搜索链表需要 O(n)O(n)O(n) 的时间复杂度,但是链表不能通过常数时间读取第 kkk 个数据。链表的优势在于能够以较高的效率在任意位置插入或删除一个节点。解题思路...

2019-08-29 15:40:15 1763

原创 [Leetcode] 多线程

前言Java 多线程解题常用方法 & 工具类类型方法说明synchronizedObject.wait(), Object.notify(), Object.notifyAll()每一个用 synchronized 修饰的部分都是一个临界区,同一时间只允许一个线程访问LockLock.lock(), Lock.unlock()具体实现类:Reentr...

2019-08-29 15:39:07 613

原创 [Leetcode] 设计LRU缓存机制

设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留...

2019-08-20 12:39:59 639

原创 [Leetcode] 常见排序算法的标准模板

快速排序(填坑法)public void quickSort(int[] arr, int left, int right) { int i = left, j = right; int pivot = arr[left]; // 以第一个元素为比较基准 while (i < j) { while (i < j && arr[j] > pivot)...

2019-08-18 23:31:18 456 2

原创 [Leetcode] 回溯算法指南

前言回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用...

2019-07-25 17:37:11 183

原创 [Leetcode] 一文玩转二叉搜索树

性质若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均小于它的根结点的值它的左、右子树也分别为二叉搜索树二叉搜索树的结点定义和普通的二叉树一样,构造它的目的是为了提高查找、插入和删除的速度。查找/* 递归 */public TreeNode searchRecursively(TreeNode root, int val) {...

2019-07-24 23:48:02 158

原创 [Leetcode] 二分查找算法指南(进阶篇)

前言在上一篇 二分查找算法指南(基础篇)中,博主带大家总结了二分查找的基本模板,并且一起讨论了几道典型的例题。在今天的文章中,我们将着重讨论二分算法的一些难点题。问题形式这类问题往往第一眼看不出使用二分查找,因为它们大都不是单纯对元素下标进行查找就能判断查找方向,也没有固定的问法,但还是有共同点可循。它们往往需要对某个区间的值进行计算,得出结果后再与条件比较从而解题。具体问题让我们先从简...

2019-07-22 22:20:27 464

原创 [Leetcode] 二分查找算法指南(基础篇)

前言二分查找算法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在 LeetCode 中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。问题形式二分查找算法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(logN)O(logN)O(logN) 完成搜索任务。题...

2019-07-21 14:50:00 521

原创 [Leetcode] 滑动窗口算法指南

前言滑动窗口类问题是面试当中的高频题,问题本身其实并不复杂,但是实现起来细节思考非常的多,想着想着可能因为变量变化,指针移动等等问题,导致程序反复删来改去,有思路,但是程序写不出是这类问题最大的障碍。本文会将 LeetCode 里面的大部分滑动窗口问题分析、总结、分类,并提供一个可以参考的模版,相信可以有效减少面试当中的算法实现部分的不确定性。问题形式滑动窗口这类问题一般需要用到双指针来进...

2019-07-08 15:58:10 2142

原创 [Leetcode] 设计哈希映射

不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。public class MyHashMap { stati...

2019-07-06 10:41:05 352

转载 [Leetcode] 一个公式团灭股票六题

以下是Leetcode经典的股票系列问题买卖股票的最佳时机买卖股票的最佳时机 II买卖股票的最佳时机 III买卖股票的最佳时机 IV买卖股票的最佳时机(含冷冻期)买卖股票的最佳时机(含手续费)这 6 道股票买卖问题是有共性的,我们通过对第四题(限制最大交易次数为 k)的分析一道一道解决。因为第四题是一个最泛化的形式,其他的问题都是这个形式的简化。第一题是只进行一次交易,相当于 k=...

2019-07-05 18:36:06 410

原创 [Leetcode] 设计循环双端队列

设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。deleteLa...

2019-07-05 12:29:19 144

原创 [Leetcode] 实现 Trie (前缀树)

实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。public class Trie { private TrieNode root; /** Initialize your data structure here. */ public Trie() { this.root = new ...

2019-06-27 16:29:10 98

原创 [Leetcode] 一文玩转二叉树的遍历

二叉树的前序,中序,后序,递归与非递归遍历二叉树的层序遍历,层序逐层输出遍历public class TraverseBinaryTree { /** Traverse a binary tree recursively */ public List<Integer> traverseRecursive(TreeNode root, Type type) { Lis...

2019-06-25 21:49:20 196

原创 [Leetcode] 设计链表

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。...

2019-06-24 22:56:16 469

空空如也

空空如也

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

TA关注的人

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