小米软件开发工程师(Java方向)面经
一面(9月5日)
为什么研究生做CV,现在找研发岗位;
描述进程控制块PCB,进程控制块中进程的哪些信息;
http与https的区别,https为什么能保证安全,客户端与服务端通过https进行交互的过程;
SQL中的几个基本命令,使用哪个命令可以在数据存在时进行更新数据,数据不存在的话则插入数据;
两个链表,找链表是否有交点,怎么找到交点;我说了自己思路后,面试官说让我使用栈来做一下(两个链表分别压入两个栈,如果栈顶元素相同的话说明有交点,然后同时pop,直到pop到两个栈的栈顶元素不相同的,说明刚才pop出来的结点是两个链表的交点);
讲一下自己对Java的理解,Java最大的特点,和其他语言相比有哪些鲜明的优势;
简单介绍一下单例模式、工厂模式、装饰着模式;
Java中注解是干嘛用的,这个我没回答好,面试官应该是想让我讲一下对Java注解的理解;
输入一个URL,URL中有个要调用的方法的字符串,那从输入URL到服务端调用相应的方法,都经过了哪些过程,用到了什么技术;
面试官问我个人对哪些技术了解的比较深入,有什么优势,对于哪些内容有比较独特深入的理解;
我做一个项目的时候,会怎么着手去做,会去如何完成好一个项目;
写代码:(1)从一个数组中找连续子数组的最大和;(2)两个字符串的最长公共子串的长度;这两个都是动态规划里面的基础题目,从了leetcode上可以找到对应的题目;
描述Dijkstra算法;
问我有什么问题;
二面(9月9日)
开始就先聊聊项目,项目多是CV相关的,简单聊了聊;
然后ConcurrentHashMap的实现原理;
AtomicInteger的实现原理,自己简单实现一下AtomicInteger中的increase()方法,写代码;
写代码实现一个装饰者模式;
两个一组翻转链表,写代码实现;
写代码,算法题:给定一个非负数组,A、B俩人轮流从数组头部或尾部取元素,AB俩人都会以对自己最有利的方式取元素,直到数组元素取完,取到元素和最大的玩家赢,求先手能否赢得游戏。
二面的内容基本就是这些,算是写了4个代码题,基础知识方面基本没问。面试官看着帅气而且友善(都说小米面试官帅,还真是),让我见一见下一轮面试官吧,哈哈。
#小米##面经##Java工程师##校招#