
面试
平静不绝望
ALOHA HEJA HE
-
原创 【ALGO】 二叉树公共祖先和之字形遍历(层次遍历)
1 源码javapackage classloader.tree;import java.util.Scanner;import java.util.*;import java.util.concurrent.ArrayBlockingQueue;public class Main { // 保存父节点 public static Map<Integer, TreeNode> parent = new HashMap<>(); // 保存遍2021-03-03 13:07:2511
0
-
原创 【ALGO】 唯一数字,其余数字出现三次
1 直接上题解// 唯一数字public static void main(String[] args) { int[] array = new int[]{1,1,1,2,3,3,3,5,5,5,6,2,2}; int ones = 0; int twos = 0; int threes; for (int x : array) { twos = twos | (ones & x);// 位或 统计 出现过两次的bit累计 .2021-03-03 12:27:5220
0
-
原创 【ALGO】100盏灯问题
1 题目有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的2 题解过程思考:需要把每个灯泡的开关次数计算出来,其实这里需要你抽象转化为求一个数字的约数个数问题---->只要一个数字的约数是奇数个,那么这盏灯就是点亮的。而且一个数的约数是成对出现的,那么什么数字的约数(A==B)呢?2021-03-03 12:25:1421
2
-
原创 【ALGO】二叉树镜像
1 题目2 源码public static void SetMirrorRecursively(BinaryTreeNode root) { if (root == null || (root.leftChild == null && root.rightChild == null)) { return; } // 交换 BinaryTreeNode tempNode =...2021-03-03 11:45:4012
0
-
原创 【ALGO】在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字
1在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。2 解题思路 1 排序+遍历 时间复杂度O(nlogn) ; 2 hash算法的时间复杂度是O(n),但它提高时间效率是以一个大小为O(n)的哈希表为代价; 3 按照位置排序并交换,直到遇到第一个重复的元...2021-03-03 11:02:1611
0
-
原创 【ALGO】搞懂限流算法
1 文章结构限流算法:计数器、滑动窗口、漏桶、令牌桶。 限流方案:Guava的RateLimiter、Alibaba Sentinel2 计数器一般来说,计数器比较粗暴,就是看单位时间内,所接受的 QPS 的请求有多少,如果超过阈值,则直接拒绝服务。比如qps=100,前100ms来了100个请求,剩余900ms空转。优点:简单 缺点:资源浪费!3 滑动窗口滑动窗口可以看做计数器的精细化实现,之前只能一分钟一分钟往前赶,现在可以根据实现的精细化 一秒一秒往前赶,虽然整体原理还是.2021-03-02 20:18:319
0
-
原创 【ALGO】唯一数字
1 其余数字出现三次 // 唯一数字 public static void main(String[] args) { int[] array = new int[]{1,1,1,2,3,3,3,5,5,5,6,2,2}; int ones = 0; int twos = 0; int threes; for (int x : array) { twos = twos | (ones2021-03-02 19:42:3017
0
-
原创 【ALGO】07 动态规划精准复习--不要等过了山丘才发现无人守候
1 算法解释动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能 完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问 题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规 划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。 动态规划是自下而上的,即先解决子问题,再解决父问题;而用带有状态记2021-02-26 13:16:5230
0
-
原创 【ALGO】 替换后最长子串长度
1 java 源码 解析public class LongestCommonStr { public static void main(String[] args) { String LC = "ABABCCCCCC"; int k = 2; char[] chars = LC.toCharArray(); System.out.println(getMaxCommonLength(chars, k)); }2021-02-24 10:19:1012
0
-
原创 【ALGO】最深公共祖先
1 源码class Solution { Map<Integer, TreeNode> parent = new HashMap<Integer, TreeNode>(); Set<Integer> visited = new HashSet<Integer>(); public void dfs(TreeNode root) { if (root.left != null) { pare2021-02-23 19:02:3714
0
-
原创 【ALGO】中序遍历+后序遍历构造二叉树
1 源码import java.util.HashMap;public class LCP { HashMap<Integer,Integer> memo = new HashMap<>(); int[] post; public TreeNode buildTree(int[] inorder, int[] postorder) { for(int i = 0;i < inorder.length; i++)2021-02-23 18:31:5020
0
-
原创 【ALGO】买卖股票的最佳时机
1 算法public class GuPiao { public static void main(String[] args) { int[] array = new int[]{7, 1, 5, 3, 6, 4}; // 累加所有的上升期间之和就是 最大收益值 System.out.println(maxProfit(array)); } public static int maxProfit(int[] prices)2021-02-23 17:57:1118
0
-
原创 【算法】寻找第K个最小的数
1 直接上源码实现public class QuickSort { private static final int[] array = new int[]{4,1,2,3,5,6,7,8,9,0}; public static int quickSortFindK(int[] array, int begin, int end, int k){ if(begin >= end){ return array[begin];2021-02-22 19:33:2516
0
-
原创 【jvm】中断深入理解,线程池,AQS都在使用的利器
1 线程中断:java中对于中断的大部分操作无外乎以下两点:设置或者清除中断标志位(对运行状态线程需要自检,堵塞状态会抛出异常) 抛出InterruptedException2 设置中断直接看源码 :对上面的两个操作说的很清晰了 /** * Interrupts this thread. * * <p> Unless the current thread is interrupting itself, which is * al2021-01-30 12:38:3057
0
-
原创 【快速排序】java 实现
1 思路 每次partition,找到head的位置 循环不变量,最终保持 [from, head] <= unsort[head] [head+1, to] >=unsort[head]public class MyQuickSort { public static void main(String[] args) { int[] unsort = new int[]{2,4,9,1,3,4,5,6,7,8}; qs...2020-11-24 15:29:2428
0
-
原创 【面试】双重锁单例 真的能写对吗?
单例模式的7种写法懒汉2种,枚举,饿汉2种,静态内部类,双重校验锁(推荐)。错误的写法:public class MyFactory { private static MyFactory instance; public static MyFactory getInstance(Connection conn) throws IOException { ...2019-07-03 23:30:26101
0
-
原创 面试--java+数据转型(76)
public static void main(String[] args) { double x =1; double y =33.33; System.out.println((short)x/y*2); }输出的数据类型是什么类型的? 答案:0.060006000600060012017-01-11 08:15:22215
0
-
原创 【面试库】--HashMap多线程put后get null ,get 死循环,get数据丢失(167)
0 公共put源码public V put(K key, V value){ ...... //算Hash值 int hash = hash(key.hashCode()); int i = indexFor(hash, table.length); //如果该key已被插入,则替换掉旧的value (链接操作) for (Ent2017-04-09 23:05:372518
1
-
转载 【面试】--java相关
1.面向对象都有哪些特性 继承、封装、多态性、抽象2.Java中实现多态的机制是什么? 继承与接口3.Java中异常分为哪些种类 3.1按照异常需要处理的时机分为编译时异常(CheckedException)和运行时异常(RuntimeException)。 3.2对于编译时异常的处理方法有两种: (1)当前方法知道如2017-11-18 19:43:55122
0
-
转载 【面试】--big Data
JAVA相关1-1)List 与set 的区别?老掉牙的问题了,还在这里老生常谈:List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复。 1-2)数据库的三大范式?原子性、一致性、唯一性 1-3)java 的io类的图解 1-4)对象与引用对象的区别对象就是好没有初始化的对象,引2017-11-18 20:06:01494
0
-
转载 【数字】--数字
1 给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中? 算法思路: unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bi2017-11-18 22:20:01177
0
-
原创 【面试】--java 基础
基本概念操作系统中 heap 和 stack 的区别什么是基于注解的切面实现什么是 对象/关系 映射集成模块什么是 Java 的反射机制什么是 ACIDBS与CS的联系与区别Cookie 和 Session的区别fail-fast 与 fail-safe 机制有什么区别get 和 post请求的区别Interface 与 abstract 类的区别IOC的优点是什么IO 和 NIO的区别,2017-11-18 20:09:03541
0
-
原创 【面试】--java 基础Cloneable 最彻底的clone是什么?
1The method {@code clone} for class {@code Object} performs a* specific cloning operation. First, if the class of this object does* not implement the interface {@code Cloneable}, then a* {@code C2017-11-19 15:19:28222
0
-
原创 【面试】--三个线程轮流打印ABC
1 lock实现public class ABCLock { private static Lock lock = new ReentrantLock(); private static Condition conditionA = lock.newCondition(); private static Condition conditionB = lock.ne2020-08-16 15:13:5362
0
-
原创 【面试】--三个线程轮流打印ABC
1 lock实现public class ABCLock { private static Lock lock = new ReentrantLock(); private static Condition conditionA = lock.newCondition(); private static Condition conditionB = lock.ne2017-11-19 17:03:411214
0
-
原创 50个人围成一圈数到3和3的倍数时出圈,问剩下的人是谁?
public static void main(String[] args) { long start = System.currentTimeMillis(); int size = 9999; int[] queue = new int[size]; for (int i = 0; i ; i++) { queue[i] = i + 1;2017-11-19 11:20:52535
0
-
原创 数字转换为(人民币)大写(读)
public class CN { private static String[] CN_NUMBER = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static String[] UNITE =2018-02-23 13:36:30872
0
-
原创 二维矩阵 反斜线输出
/** * Created by on 2018/3/17. */public class JiaZai { private static final int[][] array; static{ array= new int[][]{{1, 2, 3,4}, {5,6,7,8},{9,10,11,12},{13,14,15,16}}; } ...2018-03-17 18:10:04693
0
-
原创 【volatile-面试】内存屏障
Java中的volatileJava也支持volatile关键字,但它被用于其他不同的用途。当volatile用于一个作用域时,Java保证如下:(适用于Java所有版本)读和写一个volatile变量有全局的排序。也就是说每个线程访问一个volatile作用域时会在继续执行之前读取它的当前值,而不是(可能)使用一个缓存的值。(但是并不保证经常读写volatile作用域时读和写的相对...2019-07-02 23:36:571496
0
-
原创 面试--n的二进制1的个数(46)
一个重要的规律:找到一个方法,每次循环都是n中的1少一个? n’= n &(n-1) 1 n” = n’&(n’-1) 2 … ++ 直到 n””” 变为0;2016-12-10 16:05:41602
0