
面试
自驱
ALOHA HEJA HE
展开
-
【面试】朋友面试--被问API 网关?
为什么要网关?你知道有哪些常见的网关系统? 如何设计一个亿级网关(API Gateway)?网关主要用于请求转发、安全认证、协议转换、容灾。原创 2021-08-28 22:18:34 · 104 阅读 · 0 评论 -
【面试】朋友面试--被问ThreadLocal?
对于ThreadLocal,大家的第一反应可能是很简单呀,线程的变量副本,每个线程隔离。那这里有几个问题大家可以思考一下:ThreadLocal的 key 是弱引用,那么在ThreadLocal.get()的时候,发生GC之后,key 是否为null? ThreadLocal中ThreadLocalMap的数据结构? ThreadLocalMap的Hash 算法? ThreadLocalMap中Hash 冲突如何解决? ThreadLocalMap的扩容机制? ThreadLoca...原创 2021-08-28 22:12:38 · 195 阅读 · 0 评论 -
【面试】朋友面试--被问分库分表?
1 读写分离&分库分表读写分离主要是为了将数据库的读和写操作分不到不同的数据库节点上。主服务器负责写,从服务器负责读。另外,一主一从或者一主多从都可以。读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。常见的分库分表工具有:sharding-jdbc(当当)、TSharding(蘑菇街)、MyCAT(基于 Cobar)、Cobar(阿里巴巴)...。 推荐使用...原创 2021-08-28 21:43:07 · 182 阅读 · 0 评论 -
【面试】朋友面试--被问mybatis?
1、#{}和${}的区别是什么?注:这道题是面试官面试我同事的。答:${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc.Driver。 #{}是 sql 的参数占位符,MyBatis 会将 sql 中的#{}替换为?号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的?号占位符设置参数值,比如 ps.setInt(0...原创 2021-08-28 21:38:36 · 113 阅读 · 0 评论 -
【面试】朋友面试--被问mysql锁怎么理解?
Mysql锁:灵魂七拷问https://tech.youzan.com/seven-questions-about-the-lock-of-mysql/原创 2021-08-28 21:37:14 · 72 阅读 · 0 评论 -
【面试】朋友面试--被问mysql事务理解?
什么是事务?事务是逻辑上的一组操作,要么都执行,要么都不执行。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。事务的特性(ACID)原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要...原创 2021-08-28 21:26:34 · 99 阅读 · 0 评论 -
【面试】朋友面试--被问redis怎么使用?
简单介绍一下 Redis 呗!简单来说Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是Redis 的数据是存在内存中的,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。分布式缓存常见的技术选型方案有哪些?分布式缓存的话,使用的比较多的主要...原创 2021-08-28 21:18:45 · 510 阅读 · 1 评论 -
【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:25 · 118 阅读 · 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:52 · 144 阅读 · 0 评论 -
【ALGO】100盏灯问题
1 题目有100盏灯泡,第一轮点亮所有电灯,第二轮每两盏灯熄灭一盏,即熄灭第2盏,第4盏,以此类推,第三轮改变编号为3的倍数的电灯,第3盏,第6盏,如果原来那盏灯是亮的,就熄灭它,如果原来是灭的,就点亮它,以此类推,直到第100轮。问第100结束后,还有多少盏灯泡是亮的2 题解过程思考:需要把每个灯泡的开关次数计算出来,其实这里需要你抽象转化为求一个数字的约数个数问题---->只要一个数字的约数是奇数个,那么这盏灯就是点亮的。而且一个数的约数是成对出现的,那么什么数字的约数(A==B)呢?原创 2021-03-03 12:25:14 · 394 阅读 · 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:40 · 103 阅读 · 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:16 · 637 阅读 · 0 评论 -
【ALGO】搞懂限流算法
1 文章结构限流算法:计数器、滑动窗口、漏桶、令牌桶。 限流方案:Guava的RateLimiter、Alibaba Sentinel2 计数器一般来说,计数器比较粗暴,就是看单位时间内,所接受的 QPS 的请求有多少,如果超过阈值,则直接拒绝服务。比如qps=100,前100ms来了100个请求,剩余900ms空转。优点:简单 缺点:资源浪费!3 滑动窗口滑动窗口可以看做计数器的精细化实现,之前只能一分钟一分钟往前赶,现在可以根据实现的精细化 一秒一秒往前赶,虽然整体原理还是.原创 2021-03-02 20:18:31 · 112 阅读 · 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原创 2021-03-02 19:42:30 · 225 阅读 · 0 评论 -
【ALGO】07 动态规划精准复习--不要等过了山丘才发现无人守候
1 算法解释动态规划只能应用于有最优子结构的问题。最优子结构的意思是局部最优解能决定全局最优解(对有些问题这个要求并不能 完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。动态规划和其它遍历算法(如深/广度优先搜索)都是将原问题拆成多个子问 题然后求解,他们之间最本质的区别是,动态规划保存子问题的解,避免重复计算。解决动态规 划问题的关键是找到状态转移方程,这样我们可以通过计算和储存子问题的解来求解最终问题。 动态规划是自下而上的,即先解决子问题,再解决父问题;而用带有状态记原创 2021-02-26 13:16:52 · 267 阅读 · 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:10 · 155 阅读 · 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) { pare原创 2021-02-23 19:02:37 · 108 阅读 · 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:50 · 172 阅读 · 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:11 · 120 阅读 · 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:25 · 201 阅读 · 0 评论 -
【jvm】中断深入理解,线程池,AQS都在使用的利器
1 线程中断:java中对于中断的大部分操作无外乎以下两点:设置或者清除中断标志位(对运行状态线程需要自检,堵塞状态会抛出异常) 抛出InterruptedException2 设置中断直接看源码 :对上面的两个操作说的很清晰了 /** * Interrupts this thread. * * <p> Unless the current thread is interrupting itself, which is * al原创 2021-01-30 12:38:30 · 372 阅读 · 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:24 · 109 阅读 · 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:03 · 704 阅读 · 0 评论 -
【数字】--数字
1 给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中? 算法思路: unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bi转载 2017-11-18 22:20:01 · 300 阅读 · 0 评论 -
【面试】--big Data
JAVA相关1-1)List 与set 的区别?老掉牙的问题了,还在这里老生常谈:List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复。 1-2)数据库的三大范式?原子性、一致性、唯一性 1-3)java 的io类的图解 1-4)对象与引用对象的区别对象就是好没有初始化的对象,引转载 2017-11-18 20:06:01 · 814 阅读 · 0 评论 -
【面试】--java相关
1.面向对象都有哪些特性 继承、封装、多态性、抽象2.Java中实现多态的机制是什么? 继承与接口3.Java中异常分为哪些种类 3.1按照异常需要处理的时机分为编译时异常(CheckedException)和运行时异常(RuntimeException)。 3.2对于编译时异常的处理方法有两种: (1)当前方法知道如转载 2017-11-18 19:43:55 · 177 阅读 · 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 (Ent原创 2017-04-09 23:05:37 · 3276 阅读 · 1 评论 -
面试--java+数据转型(76)
public static void main(String[] args) { double x =1; double y =33.33; System.out.println((short)x/y*2); }输出的数据类型是什么类型的? 答案:0.06000600060006001原创 2017-01-11 08:15:22 · 312 阅读 · 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 C原创 2017-11-19 15:19:28 · 381 阅读 · 0 评论 -
【面试】--三个线程轮流打印ABC
1 lock实现public class ABCLock { private static Lock lock = new ReentrantLock(); private static Condition conditionA = lock.newCondition(); private static Condition conditionB = lock.ne原创 2020-08-16 15:13:53 · 369 阅读 · 0 评论 -
【面试】--三个线程轮流打印ABC
1 lock实现public class ABCLock { private static Lock lock = new ReentrantLock(); private static Condition conditionA = lock.newCondition(); private static Condition conditionB = lock.ne原创 2017-11-19 17:03:41 · 1487 阅读 · 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:52 · 700 阅读 · 0 评论 -
数字转换为(人民币)大写(读)
public class CN { private static String[] CN_NUMBER = new String[]{"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static String[] UNITE =原创 2018-02-23 13:36:30 · 1606 阅读 · 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:04 · 1168 阅读 · 0 评论 -
【volatile-面试】内存屏障
Java中的volatileJava也支持volatile关键字,但它被用于其他不同的用途。当volatile用于一个作用域时,Java保证如下:(适用于Java所有版本)读和写一个volatile变量有全局的排序。也就是说每个线程访问一个volatile作用域时会在继续执行之前读取它的当前值,而不是(可能)使用一个缓存的值。(但是并不保证经常读写volatile作用域时读和写的相对...原创 2019-07-02 23:36:57 · 1765 阅读 · 0 评论 -
【面试】双重锁单例 真的能写对吗?
单例模式的7种写法懒汉2种,枚举,饿汉2种,静态内部类,双重校验锁(推荐)。错误的写法:public class MyFactory { private static MyFactory instance; public static MyFactory getInstance(Connection conn) throws IOException { ...原创 2019-07-03 23:30:26 · 175 阅读 · 0 评论 -
面试--n的二进制1的个数(46)
一个重要的规律:找到一个方法,每次循环都是n中的1少一个? n’= n &(n-1) 1 n” = n’&(n’-1) 2 … ++ 直到 n””” 变为0;原创 2016-12-10 16:05:41 · 734 阅读 · 0 评论