数字马力 后端开发 一面二面面经(社招)
时隔1年,甚是感慨,没想到这么快又来面试了。
一面(30分钟)2023.07.10
- 自我介绍
- 能简单说一下用了哪些设计模式
- 能简单描述一下策略模式吗?策略模式和if-else有什么区别,怎么定义策略类的
- Linux在一个目录下面,有100个文件,需要匹配以 ‘query’ 开头的日志,并且把数量统计一下,用什么命令 (grep -c '^query' /path/to/directory/*)
- Java版本用什么
- 平时有用多线程吗
- 用过stream和lambda表达式吗
- 有一个list,包含字符串,先转换成大写,然后再对这个list进行排序
public class StringListSorting { public static void main(String[] args) { List<String> myList = new ArrayList<>(); myList.add("apple"); myList.add("banana"); myList.add("orange"); myList.add("grape"); // 转换为大写形式 List<String> uppercaseList = new ArrayList<>(); for (String str : myList) { uppercaseList.add(str.toUpperCase()); } // 或者使用流式操作 // List<String> uppercaseList = myList.stream().map(String::toUpperCase).collect(Collectors.toList()); // 对转换后的列表进行排序 Collections.sort(uppercaseList); // 或者使用流式操作 // List<String> sortedList = uppercaseList.stream().sorted().collect(Collectors.toList()); System.out.println(uppercaseList); } }
9、你们Redis的使用场景,具体怎么去用
10、基于Redis做分布式锁有使用Lua脚本吗
11、两张表,一个是员工表
副表
筛选出某部门工资最高的员工的name
SELECT e.name FROM employee e INNER JOIN department d ON e.departmentId = d.departmentId WHERE d.departmentName = '目标部门名称' ORDER BY e.salary DESC LIMIT 1;
12、会用反射之类的吗
13、对数据库索引有一些优化吗
14、假如有sql比较慢,怎么去优化
15、三数之和
16、反问
二面(20分钟)2023.07.13
- 自我介绍
- 项目中主要做那一块的工作
- 项目中具体做了哪些性能优化
- 大数据量表除了分表还有什么优化方式(分库、加索引、数据归档)
- 什么情况用到Redis,怎么用,怎么做分布式锁
- 为什么可以Redis可以用做分布式锁
- 为什么不用其他的,而用Redis
- 比较过Redis和其他缓存框架的性能吗
- Memcached能用作分布式锁吗
- 为什么可以Redis可以用做分布式缓存,Memcached能做到吗
- 有没有什么项目留下深刻印象
- 工作中看过什么其他技术(大概说了下k8s)
- 能说一下什么是配置中心吗
- 了解过多线程吗
- 为什么不要new Thread()
- 写个造成死锁的代码
public class DeadLockDemo { private static Object resource1 = new Object();//资源 1 private static Object resource2 = new Object();//资源 2 public static void main(String[] args) { new Thread(() -> { synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource2"); synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); } } }, "线程 1").start(); new Thread(() -> { synchronized (resource2) { System.out.println(Thread.currentThread() + "get resource2"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread() + "waiting get resource1"); synchronized (resource1) { System.out.println(Thread.currentThread() + "get resource1"); } } }, "线程 2").start(); } }
17、除了用synchronized加锁还有其他方式加锁吗
18、用ReentrantLock怎么实现
19、反问
#数字马力社招#