当前位置: 首页 > 面试经验 >

数字马力 后端开发 一面二面面经(社招)

优质
小牛编辑
84浏览
2023-07-15

数字马力 后端开发 一面二面面经(社招)

时隔1年,甚是感慨,没想到这么快又来面试了。

一面(30分钟)2023.07.10

  1. 自我介绍
  2. 能简单说一下用了哪些设计模式
  3. 能简单描述一下策略模式吗?策略模式和if-else有什么区别,怎么定义策略类的
  4. Linux在一个目录下面,有100个文件,需要匹配以 ‘query’ 开头的日志,并且把数量统计一下,用什么命令 (grep -c '^query' /path/to/directory/*)
  5. Java版本用什么
  6. 平时有用多线程吗
  7. 用过stream和lambda表达式吗
  8. 有一个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

  1. 自我介绍
  2. 项目中主要做那一块的工作
  3. 项目中具体做了哪些性能优化
  4. 大数据量表除了分表还有什么优化方式(分库、加索引、数据归档)
  5. 什么情况用到Redis,怎么用,怎么做分布式锁
  6. 为什么可以Redis可以用做分布式锁
  7. 为什么不用其他的,而用Redis
  8. 比较过Redis和其他缓存框架的性能吗
  9. Memcached能用作分布式锁吗
  10. 为什么可以Redis可以用做分布式缓存,Memcached能做到吗
  11. 有没有什么项目留下深刻印象
  12. 工作中看过什么其他技术(大概说了下k8s)
  13. 能说一下什么是配置中心吗
  14. 了解过多线程吗
  15. 为什么不要new Thread()
  16. 写个造成死锁的代码
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、反问

#数字马力社招#
 类似资料: