【面经】阿里秋招内推
偷偷的在准备秋招,投了几家公司。
内推一面
没想到阿里过了两天就在上班时间打过来了。 推到了当晚下班6点,结果等了一个晚上都没打过来。以为晾凉了。 第二天早上11点左右打过来了。打着撸。。。马上丢下游戏,关闭声音,接起了电话。
你好,请介绍一下你自己,巴拉巴拉。主要强调在打算法竞赛。 然后,自己扯到了自己的三个项目,并表示前两个项目没什么好讲的,技术比较水,主要是现在在写的第三个项目。
你主要写java吧,那我问你几个java的问题。
- java通常用的数据结构有什么。 list, map, set。通常是这三个,但是主要是在集合类里,他们都有许多的实现的子类,比如ArrayList,LinkedList,HashMap,HashTable等。HashMap和HashTable虽然实现差不多,但是线程安全上是不一样的。 # 故意把话题扯过去。
- 那你了解过线程和进程吗? # 套路成功 巴拉巴拉,但是突然脑子抽了,感觉这里答得不太好,最后还是圆回去了。
- 那你知道线程,进程,协程的区别吗?
emmm,java中没有协程,自己用到协程的地方主要是python,用yield和yiled from关键字进行,主要是生成器的作用,3.6之后好像用asycn和await关键字来代替了。
也不知道答得对不对。反正感觉讲起来挺真的。。 - 那创建线程的方法有什么呢 实现Thread类,实现Runnable接口,实现Callable接口
- 有接触过网络编程这一块吗。 网络编程主要了解是c++去编写的吧。自己最近在写的就是用websocket在设计方案。
- gc垃圾回收机制了解过吗。
- 堆和栈讲一下 请问所说的是jvm的堆和栈还是数据结构的呢。妥妥的让我解释了数据结构的。
那你有了解过网络编程吗
- 网络编程比较少触碰,通常就是TCP,UDP那块的内容,然后就扯了下通信如何安全,比如像TCP那样的协议,报文比较多,又有三次握手四次挥手那样的操作,有滑动窗口的操作,可以保证他可靠。
- 那么UDP为什么不安全呢(TCP与UDP区别)。然后他听我扯到了滑动窗口,就问了下滑动窗口。但是我也没细看,也没听清楚他在讲啥呀orz。忽悠过去之后又讲了下三次握手(必备)
- 那有了解过ARP协议吗(这里可能电话不太好,我听了三四次没听清。。) 噢。那个地址解析协议对吧。协议这方面平时也没怎么接触过,看到过的协议也就那几个。TPC、UDP、HTTP、DNS等。(忘记了这方面的东西,赶快去背背orz)还好他没继续问下去了。
你知道spring吧。(这个。。我听了更多次都听不清原来在讲spring)
- 你用的版本是那些呢,java版本呢。 印象中spring是5.0,就讲了。用的spring boot是2.0。jdk1.8.5。没有去用java9和java10(好像有坑就没去踩了)。跟他巴拉巴拉的扯了一堆原因,就说8已经够我用了。
- spring主要是怎样的呢 一个容器,主要是DI(依赖注入)和IOC(控制反转),然后就解释了一波依赖注入和控制反转。
- 那么依赖注入是怎么进行操作的呢? 在spring boot中不用写那么多配置文件,可以通过一些注解@Value @Resource @Autowired等注解去注入,(然后发现怕问题偏了,就扯回去)。主要的三大方式是,setter注入,构造器注入和接口注入(老本总不能忘了把)
- 然后又扯了下为什么用spring boot为什么不用springMVC巴拉巴拉,因为配置文件少啊,开心啊。哇哈哈哈。感觉没再问下去挺仁慈的。
杂七杂八
- 代码版本管理工具。 emmm。脑子抽了答了maven。还在java的边缘没转过来。git,svn现在主要push到gitlab上,可以有私隐空间。
- 平时在公司工作是什么。巴拉巴拉,当然是看书啦。推公式orz
- 开发中有没有遇到过什么坑,怎么解决的。
感想
没问到什么docker,k8s,redis,mysql,内存操作那一块的内容,自己还是有点准备的。。因为是因为这是所谓的简历筛选面,比较。。。简单吧,接下去要好好看看自己被问懵逼那一块了。
聊完已经50分钟了,马上让我做了个上机测试。 是一个在线编码环境,本以为应该要在上面敲,敲完第一题之后发现并不能编译。。所以匆匆打开编译器把后面几题秒完了。
题目1:
一段代码中,有注释和代码部分,请用你熟悉的语言 (Java/C++/Golang/Python 都可以),把代码中的注释去除掉。 样例:
/*
hello world demo
*/
#include <stdio.h>
// main begins here
int main()
{
printf("Hello, World!"); // print out hello world
return 0;
}
答案:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
boolean mark = false;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
int len = line.length();
for (int i = 0; i < len; i++) {
if (line.charAt(i) == '/' && i + 1 < len && line.charAt(i + 1) == '*') {
mark = true;
} else if (line.charAt(i) == '*' && i + 1 < len && line.charAt(i + 1) == '/') {
mark = false;
i += 2;
} else if (line.charAt(i) == '/' && i + 1 < len && line.charAt(i + 1) == '/') {
break;
}
if (i >= len) {
break;
}
if (mark) {
continue;
}
System.out.print(line.charAt(i));
}
System.out.println();
}
scanner.close();
}
}
题目2:
一个数字不重复且已排好序,但序列有经过轮转改变的数组,如 [2 3 6 8 9 16 25] 可变为 [6 8 9 16 25 2 3],请找到其中最小的元素。 样例: 给出 [6 8 9 16 25 2 3],返回 2
答案:
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
int ans = 0;
for (int i = 0; i < n; i++) {
arr[i] = scanner.nextInt();
if (i == 0) {
ans = arr[i];
} else {
ans = Math.min(ans, arr[i]);
}
}
// 虽然很想说,读入就能出答案了,且无法优化
System.out.println(ans);
// 但是,如果原本就在内存中。。还是可以优化的
// 这种做法是查找O(logn)的
System.out.println(find(arr, 0, n - 1));
}
public static int find(int[] arr, int l, int r) {
int mid = l + r >> 1;
if (arr[l] <= arr[r]) {
return arr[l];
}
if (arr[mid] < arr[l]) {
return find(arr, l, mid);
} else {
return find(arr, mid + 1, r);
}
}
}
题目3:
两个线程交替打印1-100的整数,一个打印奇数,一个打印偶数,要求输出结果有序。
这道题有考虑过加锁,但是总感觉加锁哪里怪怪的,因为还是阻止不了某一线程跑的更快一点。好像是。。所以妥妥的用了sleep
答案:
public class Main {
public static void main(String[] args) {
ThreadFun threadFunOdd = new ThreadFun(1);
ThreadFun threadFunEven = new ThreadFun(2);
threadFunOdd.start();
threadFunEven.start();
}
}
class ThreadFun extends Thread {
@Override
public void run() {
try {
while (startNumber <= 100) {
System.out.println(startNumber);
startNumber += 2;
Thread.sleep(startNumber);
}
} catch (Exception e) {
}
}
int startNumber;
ThreadFun(int startNumber) {
this.startNumber = startNumber;
}
}
哈哈哈,有个大佬吐槽我的sleep。妥妥的更新了代码。用两个锁来解决问题
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/8/13 10:19
# @Author : QuanQqqqq
# @Site :
# @File : main.py
# @Software : PyCharm
import threading
class Custom(threading.Thread):
def __init__(self, lock1, lock2, start_counter):
threading.Thread.__init__(self)
self.lock1 = lock1
self.lock2 = lock2
self.start_counter = start_counter
def run(self):
while True:
if self.lock1.acquire():
self.lock2.release()
print(self.start_counter)
self.start_counter += 2
if self.start_counter > 100:
break
if __name__ == '__main__':
counter_lock1 = threading.Lock()
counter_lock2 = threading.Lock()
counter_lock2.acquire()
c1 = Custom(counter_lock1, counter_lock2, start_counter=1)
c2 = Custom(counter_lock2, counter_lock1, start_counter=2)
c1.start()
c2.start()
内推二面
这次二面感觉。。最近状态有点差,准备又不够好orz 一面应该是简历面,面了之后把我的简历丢去了深圳。 打过来的是专门做数据库的一个团队。突然有点慌。会不会数据库考的特别难。。
- 先自我介绍一下吧
- 主要在公司里干什么。怎么处理数据的。然后哗啦啦的讲了一堆
- 学过编译原理吧emmmmm。。 这个我算是面懵逼了。史妈妈教的编译原理基本都忘光了啊。 就记得个有限状态自动机 恍恍惚惚的就忽悠过去了
- 学过操作系统吗 操作系统中有什么主要的吗,线程和进程,内存管理。。然后其他就不记得了 讲一下进程和线程的区别吧
- 学过计算机网络吗 讲一下TCP和UDP的区别吧 老套路,三次握手四次挥手,滑动窗口,TCP报文比较多UDP报文比较少,一个可靠和另一个不可靠。应用场景等。
- 学过计算机算法吗 emmmm。大佬我怕你是没见过简历噢。然后全部排序讲了一次。真的是全部。。 冒泡,选排,快排及其优化,堆排,基尔,桶排,归并,基数 虽然说,最后突然问我又没了解过计数排序。。真没有
- 了解过数据结构吗 我怕是真的没看简历噢。然后就讲B树,B+树,红黑树(讲红黑树的时候给他讲了下splay。并说红黑树并不是太好)hash表,以及hash表如何解决冲突等
- java学了挺久啊。然后就开始问java的东西了
- servlet讲一下流程 servlet我只记得一堆配置。然后就是生命周期。没有其他的了啊
- spring的流程。 主要AOP IOC。讲了一下bean。没讲bean的生命周期。扯了两句就过去了。
- 有了解过hibernate吗,是如何操作的。 印象中就创建Session Transaction,然后session执行save,update,delete等操作。主要是面向对象操作的。
- java中的classpath和path。 一脸懵逼。。说的是配置环境变量吗。然后就扯了jre和jdk
- java中的static关键字。简单。 为什么他能通过类名.属性/方法直接访问。 。。。
- java中的final关键字 属性不能重新赋值。 方法不能重写 类不能继承 然后他问我。。就没有什么属性是可以赋值的吗。。突然懵逼,确信说没有不像C++的const
- socket编程了解过吗 只敢说了解
- 还有了解过其他java框架吗 jetty和spring cloud
- 说一说C++和java的区别 java给你的感觉是什么。 举了解释性语言和编译性语言的区别,并说python和java的差别等。
- 数据库学过吗。说一下ACID 。。。ACID我这次是彻底的跪了。虽然知道原子性、一致性、隔离性、持久性 但是原子性和一致性都记错了。他让我举例子我一下子吹不出来
- 索引了解过吗。什么时候用B+树什么时候用hash表 没想出来什么时候用。 他最后给我选择。如果查找某一区间的数据用什么。当然B+树啦
- 编码规范,算法,编程语言之间的关系
面了50分钟,最后还是很客气的问了我工作地点有没有问题。就是没有当场把我拒了。说两个星期内如果还有消息还会跟我联系。。希望不挂吧orz。毕竟第一次阿里。新手保护光环~
emmm总之感觉今天。本身状态就不是很好。再加上面试第一句问了句会编译原理嘛就开始懵逼。。史妈妈,我都找工作了,还是没放过我orz。
接下去还是得要抽空看一看自己准备的资料,太多东西都自以为是了,记得不太清楚了。
转载自:https://juejin.cn/post/6844904131480535054