大厂后端工程师面试
文章平均质量分 63
烟雨木子
银行企业级架构师 北京大学工程管理硕士 开开心心涨点知识
展开
-
【面试八股文】每日一题:Java finally语句到底是在return之前还是之后执行?
这里因 为在return之前发生了除0异常,所以try中的return不会被执行到,而是接着执行捕获异常的catch 语句和最终的finally语句,此时两者对b的修改都影响了最终的返回值,这时return b;最后总结:finally块的语句在try或catch中的return语句执行之后返回之前执行且finally里的修改语句可能影响也可能不影响try或catch中 return已经确定的返回值,若finally里也有return语句则覆盖try或catch中的return语句直接返回。原创 2024-01-21 09:59:02 · 344 阅读 · 0 评论 -
【面试八股文】每日一题:jdk动态代理机制(简单易懂)
/loader:一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载//interfaces:一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口中的方法了//h:一个InvocationHandler对象,表示的是当我这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler对象上。这就是一个“动态代理”的过程。原创 2024-01-21 09:57:51 · 325 阅读 · 0 评论 -
【面试八股文】每日一题:NIO原理
为什么我执意要先把NIO基础原理放到最开始来讲,主要是因为,只有理解好了原理,才能更好的去理解NIO。一、用户空间和内核空间在linux操作系统,会把内存分为两块,一块是内核空间,一块用户空间。我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer。原创 2024-01-20 12:04:00 · 798 阅读 · 0 评论 -
【面试八股文】每日一题:基础与框架
*** 测试StringBuilder用法*/privatestaticvoid() {//估计一般的,上来就直接如下这么干了!简单粗暴。String s ="";forinti = 0;i < 100;i++) {;"s = "+ s);//实际上如下这个写法就好一点点,说明你的Java还是比上面的好一丢丢的newforinti = 0;i < 100;i++) {"sb = "+ sb);原创 2024-01-20 12:03:02 · 773 阅读 · 0 评论 -
【面试八股文】每日一题:系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
对于不定时出现的接口耗时比较严重的问题,我们的定位思路基本如下:首先找到该接口,通过压测工具不断加大访问力度,如果说该接口中有某个位置是比较耗时的,由于我们的访问的频率非常高,那么大多数的线程最终都将阻塞于该阻塞点,这样通过多个线程具有相同的堆栈日志,我们基本上就可以定位到该接口中比较耗时的代码的位置。这里需要说明的是,我们在判断是否为用户线程时,可以通过线程最前面的线程名来判断,因为一般的框架的线程命名都是非常规范的,我们通过线程名就可以直接判断得出该线程是某些框架中的线程,这种线程基本上可以排除掉。原创 2024-01-20 12:01:42 · 893 阅读 · 0 评论 -
【面试八股文】每日一题:详解JVM内存管理与垃圾回收机制2 - 何为垃圾
随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远。作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很好的完成工作。那还有必要深入了解GC吗?学习GC的意义在哪儿?不管性能提高到何种程度,GC都需要花费一定的时间,对于实时性要求较高的场景,就必须尽量压低GC导致的最大暂停时间 (GC会导致应用线程处于暂停状态),举两个例子:实时对战游戏:如果因为GC导致玩家频繁卡顿,任谁都会想摔手机吧。原创 2024-01-20 11:59:42 · 818 阅读 · 0 评论 -
【面试八股文】每日一题:详解JVM内存管理与垃圾回收机制1 - 内存管理
Java应用程序是运行在JVM上的,得益于JVM的内存管理和垃圾收集机制,开发人员的效率得到了显著提升,也不容易出现内存溢出和泄漏问题。但正是因为开发人员把内存的控制权交给了JVM,一旦出现内存方面的问题,如果不了解JVM的工作原理,将很难排查错误。本文将从理论角度介绍虚拟机的内存管理和垃圾回收机制,算是入门级的文章,希望对大家的日常开发有所助益。原创 2024-01-20 11:59:04 · 854 阅读 · 0 评论 -
【面试八股文】每日一题:NIO面试详解
subReactor可以是一个线程,也可以是线程池(一般可以设置为CPU核数),负责多路分离已连接的socket,读写网络数据,这里的读写网络数据可类比顾客填表这一耗时动作,对具体的业务处理功能,其扔给worker线程池完成。他会通知顾客钱已经到柜台了,让顾客重新排队处理,当柜台职员再次服务该顾客时,发现该顾客前3步已经完成,直接执行第4步即可。假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理,柜台一个职员5分钟能处理完一个顾客,一个小时9名职员能处理:9*(60/5)=108。原创 2024-01-20 11:58:05 · 779 阅读 · 0 评论 -
【面试八股文】每日一题:JVM面试详解
除此以外,在概念中还有一个直接内存的概念,事实上这部分内存并不属于虚拟机规范中定义的内存区域,但是因为在JDK1.4+后新加的NIO类,以及JDK1.8+后的Metaspace的关系,所以在讨论JVM时也经常会被放到一起讨论。在上面的内容中我们分析了Java堆、Java栈,知道Java堆存储的是对象,而Java栈内存是方法执行时所需要的局部变量,其中就包括堆中对象的引用,如果多个线程同时修改堆中同一引用对象的数据,就可能会产生并发问题,导致多个线程中某些线程得到的数据值与实际值不符,造成脏数据。原创 2024-01-20 11:57:12 · 793 阅读 · 0 评论 -
【面试八股文】每日一题:红黑树
二叉树排序树、二叉树查找树、二叉搜索树 :左边都小于右边。平衡二叉树 解决二叉排序树 链表问题。原创 2024-01-20 11:52:55 · 480 阅读 · 0 评论 -
【面试八股文】每日一题:MyBatis 面试题
原创 2024-01-20 11:40:02 · 353 阅读 · 0 评论 -
【面试八股文】每日一题:mysql原理机制?
我们平时所说的索引,如果没有特别指明,都是指。复合索引,前缀索引,唯一索引默认都是使用。其中聚集索引,次要索引,覆盖索引,树这种类型的索引之外,还有哈希索引。多路搜索树,并不一定是二叉树。###永远小表驱动大表。原创 2024-01-20 11:36:26 · 352 阅读 · 0 评论 -
【面试八股文】每日一题:redis的LRU了解过吗? 可否手写一个LRU算法?
1 所谓缓存,必须要有读+写两个操作,按照命中率的思路考虑,写操作+读操作时间复杂度都需要为O(1)//map负责查找,构建一个虚拟的双向链表,它里面安装的就是一个个Node节点,作为数据载体。if (map.size() == cacheSize) //坑位满了。查找快,插入快,删除快,且还需要先后排序-------->什么样的数据结构满足这个问题?//2 构建一个虚拟的双向链表,,里面安放的就是我们的Node。//1.构造一个node节点作为数据载体。//5.获得最后一个节点。原创 2024-01-20 11:34:21 · 885 阅读 · 0 评论 -
【面试八股文】每日一题:REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案
缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。原创 2024-01-20 11:32:26 · 349 阅读 · 0 评论 -
【面试八股文】每日一题:redis40道面试题
如果你想返回用户及用户的分数,你需要这样执行:ZRANGEuser_scores010WITHSCORESAgoraGames就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的,你可以在这里看到。幸运的是,随着Redis这些年的改进,很容易找到怎么恰当的使用Redis来缓存会话的文档。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。原创 2024-01-20 11:31:19 · 402 阅读 · 0 评论 -
【面试八股文】每日一题:ReentrantLock和synchronized区别?
当执行monitorenter时,如果目标锋对象的计数器为零,那么说明它没有被其他线程所持有,Java虚拟机会将该锁对象的持有线程设置为当前线程,并且将其计数器加i。在目标锁对象的计数器不为零的情况下,如果锁对象的持有线程是当前线程,那么Java虚拟机可以将其计数器加1,否则需要等待,直至持有线程释放该锁。是指在同一个线程在外层方法获取锁的时候,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),计数器为零代表锁已被释放。每个锁对象拥有一个锁计数器和一个指向持有该锁的线程的指针。原创 2024-01-20 11:14:14 · 381 阅读 · 0 评论 -
【面试八股文】每日一题:阻塞队列知道吗?
当阻塞队列满时,再往队列里面add插入元素会抛IllegalStateException: Queue full。当阻塞队列空时,再往队列Remove元素时候回抛出NoSuchElementException。当阻塞队列满时,生产者继续往队列里面put元素,队列会一直阻塞直到put数据or响应中断退出。当阻塞队列空时,消费者试图从队列take元素,队列会一直阻塞消费者线程直到队列可用.当阻塞队列满时,队列会阻塞生产者线程一定时间,超过后限时后生产者线程就会退出。:由了解结构组成的双向阻塞队列.原创 2024-01-18 21:04:12 · 884 阅读 · 0 评论 -
【面试八股文】每日一题:Synchronized源码面试25连问?
先说偏向锁,当我们使用synchronized关键字锁定某个对象的时候,如果这个(锁)对象处于匿名偏向状态,也就是(锁对象)markword这个64位的二进制数中,表示偏向线程的bit位都是0并且锁状态位表示的是偏向锁状态,这个时候,线程获取时,直接在锁对象markword高位内存储当前线程内存地址,这块是使用cas比较并替换完成的,如果设置成功了,那当前这把锁就是偏向当前线程的锁了,,然后当前线程就可以直接执行同步代码块了,获取锁的成本非常低,基本上两个步骤。原创 2024-01-19 08:45:58 · 770 阅读 · 0 评论 -
【面试八股文】每日一题:产生死锁的主要原因?
死锁是指两个或者以上的进程在执行过程中。因争夺资源而造成的一种相互等待的现象。若无外力干涉那他们都将无法推进下去。进程运行推进的顺序不合适。jstack找到死锁查看。jps命令定位进程编号。原创 2024-01-19 08:46:20 · 370 阅读 · 0 评论 -
【面试八股文】每日一题:单例设计模式?单例模式写法?
汉模式需要考虑线程安全,所以我们多写了好多的代码,饿汉模式利用了类加载的特性为我们省去了线程安全的考虑,那么,既能享受类加载确保线程安全带来的便利,又能延迟加载的方式,就是静态内部类。3)这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,在单例模式中大多数都是调用getInstance方法,但是导致类装载的原因有很多种,因此不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance就没有达到lazyloading的效果。原创 2024-01-19 08:46:40 · 835 阅读 · 0 评论 -
【面试八股文】每日一题:公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁
并发包ReentrantLock的创建可以指定构造函数的boolean类型来得到公平锁或者非公平锁 默认是非公平锁。如果有一个线程想去写共享资源来 就不应该有其他线程可以对资源进行读或写。多个线程同时操作 一个资源类没有任何问题 所以为了满足并发量。对于synchronized而言 也是一种非公平锁.非公平锁的优点在于吞吐量必公平锁大.独占锁(写)/共享锁(读)/互斥锁。通过构造哈数指定该锁是否是公平锁。可重入锁最大的作用就是避免死锁。读取共享资源应该可以同时进行。可重入锁(又名递归锁)原创 2024-01-19 08:47:03 · 1357 阅读 · 0 评论 -
【面试八股文】每日一题:假如生产环境出现CPU占用过高,请谈谈你的分析思路和定位?
5. jstack 进程ID | grep tid(16进制线程ID小写英文) -A60。2. ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序。ps -mp 进程 -o THREAD,tid,time。4、将需要的线程ID转换为16进制格式(英文小写格式)printf "%x\n" 有问题的线程ID。1. 先用top命令找出CPU占比最高的。结合Linux和JDK命令一块分析。3. 定位到具体线程或者代码。原创 2024-01-19 08:47:18 · 396 阅读 · 0 评论 -
【面试八股文】每日一题:美团面试10连问?
抽象工厂模式是工厂模式的一个扩展,抽象工厂只有一个产品体系的话会退化为工厂模式,如果我们新增一个产品体系的话,也就是说一旦新增一个产品体系的话,就必须去修改原有的工厂逻辑,包括所有的具体工厂,然后就回到简单工厂的局面,所以说,抽象工厂模式,具体工厂类可以创建多个大类,但是还是需要修改抽象工厂和具体工厂的代码,违反开闭原则,对扩展开放(对提供方),对修改关闭(对使用方),所以设计模式也只是一种指导思想,抽象工厂模式有四个角色,抽象工厂,具体工厂,抽象产品,具体产品。3)既统一了算法,也提供了很大的灵活性。原创 2024-01-19 08:47:35 · 371 阅读 · 0 评论 -
【面试八股文】每日一题:描述一下JVM加载class文件的原理机制?
Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。类装载方式,有两种 :1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中,2.显式装载, 通过class.forname()等方法,显式加载需要的类Java类的加载是动态的,它并不会一次性将所有原创 2024-01-19 08:47:48 · 764 阅读 · 0 评论 -
【面试八股文】每日一题:你平时工作用过的M常用基本配置参数有哪些?
Xss 设置单个线程的大小,一般默认为512K~1024K 等价于-XX:ThreadStackSize。-XX:MaxTenuringThreshold 设置垃圾最大年龄。-XX:+PrintGCDetails 输出详细GC收集日志信息。-Xms 初始大小内存,默认为物理内存1/64。-Xmx 最大分配内存,默认为物理内存1/4。-Xmn 设置年轻代大小。原创 2024-01-19 08:48:04 · 360 阅读 · 0 评论 -
【面试八股文】每日一题:你说你做过JVM调优和参数配置,请问如何盘点查看MM系统默认值?
等价于 -XX:InitialHeapSize。jinfo举例,如何查看当前运行程序的配置。jinfo -flag 配置项 进程编号。-XX:属性key=属性值value。等价于-XX:MaxHeapSize。两个经典参数:-Xms和-Xmx。原创 2024-01-19 08:48:34 · 317 阅读 · 0 评论 -
【面试八股文】每日一题:强引用、软引用、弱引用、虚引用分别是什么?
你知道弱引用的话,能谈谈WeakHashMap吗?GCRoots和四大引用的小总结。软引用和弱应用的适用场景。强引用(默认支持模式)原创 2024-01-19 08:48:48 · 330 阅读 · 0 评论 -
【面试八股文】每日一题:请谈谈你对ooM的认识?
递归可导致。原创 2024-01-19 08:49:06 · 381 阅读 · 0 评论 -
【面试八股文】每日一题:生产环境服务器变慢,诊断思路和性能评估谈谈?
pidstat -p 进程号 -r 采样间隔秒数。pidstat -u 1 -p 进程编号。uptime,系统性能命令的精简版。每个进程使用cpu的用量分解信息。查看CPU(包含不限于)磁盘IO:iostat。网络IO:ifstat。查看所有CPU核信息。原创 2024-01-19 08:49:20 · 433 阅读 · 0 评论 -
【面试八股文】每日一题:我们知道ArrayList是线程不安全,请编写一个不安全的案例并给出解决方案?
写时复制 copyOnWrite 容器即写时复制的容器 往容器添加元素的时候,不直接往当前容器object[]添加,而是先将当前容器object[]进行。* copy 复制出一个新的object[] newElements 然后向新容器object[] newElements 里面添加元素 添加元素后,* 这样的好处是可以对copyOnWrite容器进行并发的读,而不需要加锁 因为当前容器不会添加任何容器.所以copyOnwrite容器也是一种。* 读写分离的思想,读和写不同的容器.原创 2024-01-19 08:49:32 · 360 阅读 · 0 评论 -
【面试八股文】每日一题:原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗?
ABA问题的产生原子引用/****/String;;2222时间戳原子引用/**问题的解决1001001100101101100},).start();//先暂停1秒 保证完成ABA11002019},).start();2//暂停1秒钟t3线程110010111011001},).start();//保证线程3完成1次ABA。原创 2024-01-19 08:49:47 · 812 阅读 · 0 评论 -
【面试八股文】每日一题:怎么查看服务器默认的垃圾收集器是那个?
并行回收GC(Parallel)/(Parallel Scavenge)并行GC(Parallel Old)/(Parallel MSC)串行回收GC(Serial Old)/(Serial MSC)串行GC(Serial)/(Serial Coping)Server/Client模式分别是什么意思。怎么查看默认的垃圾收集器是哪个?并发标记清除GC(CMS)并行GC(ParNew)默认的垃圾收集器有哪些。垃圾收集器配置代码总结。原创 2024-01-18 10:04:38 · 411 阅读 · 0 评论 -
【面试八股文】每日一题:线程池用过吗?ThreadPoolExecutor谈谈你的理解?
第三: 提高线 程的可管理性.线程是稀缺资源,如果无限的创阿金,不仅会消耗资源,还会较低系统的稳定性,使用线程池可以进行统一分配,调优和监控.核心线程数就是工作线程数 可以理解成是初始化的时候就设置好的 免得用的时候没有再创建浪费时间。峰值下来了 用不了这么多工作线程了 就会往下减 就是后面那俩时间和时间单位的参数了。,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则创建新线程.,也就是说来了任务就创建线程运行,如果线程空闲超过60秒,就销毁线程。原创 2024-01-18 10:02:37 · 291 阅读 · 0 评论 -
【面试八股文】每日一题:线程池用过吗?生产上你是如何设置合理参数?
System.out.println(Thread.currentThread().getName() + "\t 办理业务");System.out.println(Thread.currentThread().getName() + "\t 办理业务");你在工作中单一的/固定数的/可变你的三种创建线程池的方法,你用哪个多?你在工作中是如何创建线程池的,是否自定义过线程池使用。原创 2024-01-18 10:01:09 · 909 阅读 · 0 评论 -
【面试八股文】每日一题:G1垃圾收集器?拓展连问
常用配置参数(了解)原创 2024-01-17 09:09:22 · 558 阅读 · 0 评论 -
【面试八股文】每日一题:CountDownLatch?CyclicBarrier?Semaphore?三连问
CyclicBarrier的字面意思是可循环(Cyclic) 使用的屏障(barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫做同步点)时被阻塞,知道最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法.System.out.println(Thread.currentThread().getName() + "\t" + "国,灭亡");让一些线程阻塞直到另外一些完成后才被唤醒。* 秦灭六国 一统华夏。原创 2024-01-17 09:02:56 · 894 阅读 · 0 评论 -
【面试八股文】每日一题:阿里巴巴面试13连问?
Bitmap:典型的就是哈希表缺点是,Bitmap对于每个元素只能记录1bit信息,如果还想完成额外的功能,恐怕只能靠牺牲更多的空间、时间来完成了 布隆过滤器(推荐) 就是引入了k(k>1)k(k>1)个相互独立的哈希函数,保证在给定的空间、误判率下,完成元素判重的过程。我们可以简单的理解为:由于原有缓存失效,新缓存未到期间(例如:我们设置缓存时采用了相同的过期时间,在同一时刻出现大面积的缓存过期),所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。原创 2024-01-17 09:00:48 · 320 阅读 · 0 评论 -
【面试八股文】每日一题:字节面试18连问?
10、在平时工作过程中,mybatis和hibernate的区别与优劣。11、JDK8有什么新特性,比较好用的,比如兰姆达表达式。3、如果机器是200G,要存400G,应该怎么办?13、遇到的生产问题,怎么解决的,详细一些。6、垃圾回收四种算法,分别怎么回收的?18、memcached与redis。7、synchroized的作用域。4、redis的过期策略?5、hashmap相关问题。8、生产事故,怎么解决的?@Autowired注解。17、linxu常用命令。原创 2024-01-17 08:54:43 · 357 阅读 · 0 评论 -
【面试八股文】每日一题:hashmap源码面试21连问?
任意长度的输入->固定长度的输出。原创 2024-01-16 09:20:04 · 1162 阅读 · 0 评论 -
【面试八股文】每日一题:CAS四连问?
*** @author* 1.什么是CAS?* 比较并交换**/是CAS的核心类 由于Java 方法无法直接访问底层 ,需要通过本地(native)方法来访问,UnSafe相当于一个后面,基于该类可以直接操作特额定的内存数据.UnSafe类在于sun.misc包中,其内部方法操作可以向C的指针一样直接操作内存,因为Java中CAS操作的助兴依赖于UNSafe类的方法.注意UnSafe类中所有的方法都是native修饰的,也就是说UnSafe类中的方法都是直接调用操作底层资源执行响应的任务。原创 2024-01-16 08:55:01 · 1000 阅读 · 0 评论