
面试指南
文章平均质量分 73
打磨时光
我是打磨匠,关注软件开发,打磨产品,服务人类。
展开
-
二叉树—前序遍历、中序遍历(非递归)
【转载】https://www.cnblogs.com/bigsai/p/11393609.html层级遍历public void cengxu(node t) {//层序遍历 Queue<node> q1 = new ArrayDeque<node>(); if (t == null) return; if (t != null) { q1.add(t)...转载 2020-01-02 22:38:42 · 126 阅读 · 0 评论 -
数据结构与算法之使用两个栈实现一个队列
public class QueueOfStack<T> { private Stack<T> stackA = null; private Stack<T> stackB = null; public QueueOfStack() { stackA = new Stack<T>(); stackB = new Stack<T...原创 2020-01-01 18:24:56 · 174 阅读 · 0 评论 -
【转载】mysql 常见面试题
一、为什么用自增列作为主键1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含...转载 2019-12-29 23:07:58 · 109 阅读 · 0 评论 -
面试总结
总结一下最近三次面试主要的问题:SpringSpring 如何处理 Bean 的循环依赖问题BeanFactory 和 FactoryBeanSpring Bean 的生命周期Spring Bean 的加载顺序谈谈你对于 Spring 的理解并发编程线程池都是这么配置的线程池中各个参数的含义Future 的 get 方法分布式锁Redis 实现分布式锁的原理Zo...原创 2020-01-12 20:02:29 · 215 阅读 · 0 评论 -
二叉树之对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.va...原创 2019-12-21 20:40:29 · 107 阅读 · 0 评论 -
二叉树之二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = nul...原创 2019-12-21 16:29:29 · 90 阅读 · 0 评论 -
二叉树之从上向下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:借助队列先进先出的特性import java.util.ArrayList;import java.util.Deque;import java.util.LinkedList;/**public class TreeNode { int val = 0; TreeNode left = null; T...原创 2019-12-21 15:42:35 · 130 阅读 · 0 评论 -
二叉树之判断平衡二叉树
AVL树的名字来源于它的发明作者G.M. Adelson-Velsky 和 E.M. Landis。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。...原创 2019-12-21 15:03:55 · 193 阅读 · 0 评论 -
二叉树之前、中、后序遍历
前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树。中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树。后序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身/**public class TreeNode { int val = 0; T...原创 2019-12-21 11:26:34 · 249 阅读 · 0 评论 -
二叉树之二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5代码实现:/**publ...原创 2019-12-21 11:05:08 · 92 阅读 · 0 评论 -
二叉树之二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { t...原创 2019-12-21 10:32:57 · 120 阅读 · 0 评论 -
链表之查找环的入口节点
思路:设置快慢指针,都从链表头出发,快指针每次走两步,慢指针一次走一步,假如有环,一定相遇于环中某点(结论1)。接着让两个指针分别从相遇点和链表头出发,两者都改为每次走一步,最终相遇于环入口(结论2)。以下是两个结论证明:两个结论:1、设置快慢指针,假如有环,他们最后一定相遇。2、两个指针分别从链表头和相遇点继续出发,每次走一步,最后一定相遇与环入口。证明结论1:设置快慢指针fast和l...原创 2019-12-21 09:57:24 · 238 阅读 · 0 评论 -
链表之删除链表中的重复节点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/* public class ListNode { int val; ListNode next = null; ListNode(int val)...原创 2019-12-20 16:54:20 · 121 阅读 · 0 评论 -
链表之链表中倒数第k个节点
public class Solution { public ListNode FindKthToTail(ListNode head,int k) { if(head == null) return head; // 肯定要遍历一次,获取整个链表的长度 int count = 0; ListNode node = head;...原创 2019-12-20 16:10:53 · 140 阅读 · 0 评论 -
链表之5个常见的链表操作
单链表翻转链表中环的检测两个有序的链表合并删除链表倒数第n个节点求链表的中间节点原创 2019-10-28 23:00:58 · 147 阅读 · 0 评论 -
链表之单向链表判断回文
思考题:如何判断一个字符串是否是回文字符串的问题,我想你应该听过,我们今天的题目就是基于这个问题的改造版本。如果字符串是通过单链表来存储的,那该如何来判断是一个回文串呢?你有什么好的解决思路呢?相应的时间空间复杂度又是多少呢?使用快慢指针定位中间节点从开始对前半部分到中间节点逆序前后半部分比较,判断是否为回文如图所示:采用快慢指针 slow、fast慢指针每次走一步: slow...原创 2019-10-27 23:05:23 · 596 阅读 · 1 评论 -
设计模式之装饰器模式
装饰器模式Java 的 IO 中就使用了装饰器模式进行设计。职责动态的为一个对象增加新的功能装饰模式是一种用于代替继承的技术。无需通过继承增加子类就能扩展对象的新功能。使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。实现细节装饰者和被装饰者拥有相同的接口。角色作用组件接口是装饰者和被装饰者的父类或者是接口。定义了被装饰者的核心功...原创 2019-10-27 18:40:47 · 480 阅读 · 0 评论 -
设计模式之享元模式
享元模式场景内存属于稀缺资源,不要随便浪费。如果有很多相同的对象,可以通过享元模式,节省内存。核心以共享的方式高效的支持大量细粒度对象的重用。共享的关键是区分了外部状态和内部状态外部状态:不可以共享,会随着环境变化而变化内部状态:可以共享,不会随着环境变化而变化享元模式实现FlyWeightFactory 享元模式工厂类创建管理享元模式对象,一般设计成键值...原创 2019-10-27 17:26:23 · 98 阅读 · 0 评论 -
排序算法之归并排序
归并排序是利用递归与分治思想将数据序列划分成越来越小的半子序列,在对其进行排序,最后利用递归将排好序的半子序列合并成越来越大的有序序列。归并排序中,归 即是递归的意思,即递归的将数组这般的分离为单个数组,例如:{ 9, 2, 4, 1, 5, 3, 8 }归并排序算法的原理:对于给定的数组序列,首先将每两个相邻的长度为1的子序列进行归并,得到n/2(向上取整)个长度为 2 或 1 的有序子...原创 2019-10-23 23:04:12 · 173 阅读 · 0 评论 -
排序算法之快速排序
快速排序是一种高效的排序算法,它采用分而治之的思想,把大的拆分成小的,小的再拆分为更小的。其原理是:对于给定的数组,通过一趟排序之后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,知道序列中的所有数值均有序为止。其算法步骤主要是:分解。将输入的序列 arr[ m…n ] 划分成两个非空子序列 arr[ m…k ] ...原创 2019-10-22 23:48:13 · 242 阅读 · 0 评论 -
排序算法之插入排序
插入排序类似于打扑克,取出未排序的一张牌插入到已排序的牌中,取出的一张牌是在已排序好的牌中从后向前查找,直到查找到比当前牌小的那个位置,然后插入进去示例代码: [9, 1, 8, 3, 6, 2, 7][1, 9, 8, 3, 6, 2, 7][1, 8, 9, 3, 6, 2, 7][1, 3, 8, 9, 6, 2, 7][1, 3, 6, 8, 9, 2, 7][1, 2, 3,...原创 2019-10-20 21:36:11 · 112 阅读 · 0 评论 -
排序算法之时间复杂度、空间复杂度
排序算法最好时间平均时间最坏时间辅助存储稳定性备注选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定n小时比较好,适合数不多的数组排序冒泡排序O(n)O(n^2)O(n^2)O(1)稳定n小时比较好,小规模排序...原创 2019-10-20 20:25:06 · 129 阅读 · 0 评论 -
排序算法之选择排序
选择排序的基本原理:对于给定的数组,经过一轮的比较火的最小的数,并将该数的位置和第一个数的位置进行交换;然后对不包含第一个数的其他数继续进行比较并进行位置的交换,一直重复到只有一个数为止。示例:[9, 1, 8, 3, 6, 2, 7]i=0 arr[i] = 9 temp=9 index = 0开始比较,9 > 1 temp = 1, index = 1,…后面的都比 temp...原创 2019-10-20 20:14:54 · 102 阅读 · 0 评论 -
二分查找及其相关扩展
public class BinarySearch { /** * @desc 二分查找,将索引返回 * @param k * @param arr * @return */ public static int search(int k, int[] arr) { int low = 0; int ...原创 2019-10-16 22:25:24 · 155 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序顾名思义就是整个排序过程就像气泡一样往上升,单向冒泡排序的基本思想就是:给定 n 个数值,从第一个值开始一次对相邻的进行比较,当前面的值大于后面的值的时候,交换位置,依次比较完之后算一轮,n 个值中的最大值将在最后一位,然后对前面的 n-1 位进行第二轮比较,依次类推。例如: { 1, 6, 3, 5, 7, 9, 8, 4 }第一轮:1 < 6 位置不变{ 1, 6, 3...原创 2019-10-16 23:14:18 · 171 阅读 · 0 评论