前言
只有光头才能变强
这阵子跑去面试Java实习生啦~~~我来简单介绍一下背景吧。
广州三本大三在读,在广州找实习。大学开始接触编程,一个非常平庸的人。
在学习编程时,跟我类似的人应该会有一个疑问:究竟学到什么程度才能找到一份实习/工作呢?
- 针对的是中小公司..
我是在6月1号开始投的简历找Java实习:
实习憎投了17份:
在前程无忧投了69份(没有算今天刚投的):
在boss直聘沟通51个,可以发送8份简历出去:
下面是我的简历(我不会写简历,需要修改的地方还请大家不吝在评论区留言)
可能投递的公司是有重复的,可能我投递的意向更多偏向于离家里比较近的,并不是全部投应届/实习(其中1-3年的也投了)。
- 就上面所投和简历的情况,我拿到了5份面试机会。
这篇文章其实主要是记录一下自己的面试经历,希望大家看完之后能有所了解:进入中小公司究竟需要什么水平。
- 看面试题和实际面试时被问到的感觉是完完全全不一样的(可能会没听明白面试官所想问的,也很有可能大脑就短路啦,就忘记啦)
一、公司A
1.1面试
- 简单介绍一下你的项目,说一下项目有什么模块
- 刚才我进去注册了一下你写的网站,发现注册失败了。你的网站是做了邮箱校验吗?ps:后来查了一下,是我的邮箱验证码失效了,在后台抛出异常,所以注册失败了
- 项目中的在线聊天功能是怎么实现的?有没有去测试浏览器的兼容性问题?
- 我看你有用过ssm/Springboot,你的项目部署在哪里?ssm的项目打的什么包?springBoot打的什么包(指的是jar和war)
- Java集合简单说一下,HashMap是怎么实现key是唯一的
- 简单说说nio是什么,是哪个版本开始有的?
- aio是什么?了解过吗?是哪个版本开始有的?与nio的区别知道吗?
- 有了解过netty吗?
- 我看你用过RESTful,你能简单说说RESTful有什么特点吗?使用RESTful的好处是什么?RESTful有什么缺点吗?
- 电子移动商城和纳税服务系统是你做的吗?
- 简单说一下你是怎么理解AOP,方法拦截和AOP有什么区别?xxxx功能是否能用AOP实现
1.2公司A总结
公司A是我第一家面试的,面了20多分钟就完事了…没有hr,自我介绍都没说就直接开始了。当然了,面试官还是很nice的。
- 面试官都是针对简历写的东西来提问,问的东西并没有超出简历的范围
经过这家面试,我知道我自己得多引导引导面试官。因为面试的时间太短了,基本都是一问一答,应该主动说出一些自己知道的东西,答得太少了。
最后拿到了offer
二、公司B
2.1笔试单选题
关注Java3y公众号的概率是5%,收藏Java3y的文章概率是20%,收藏Java3y的文章后会关注Java3y的公众号的概率是20%,已知某开发者看到Java3y公众号之后关注了。那么该开发者收藏过Java3y的文章概率是多少?
通俗解析:
- 1、关注概率=5%。
- 2、关注有两种情况,收藏关注,不收藏关注 。
- 3、收藏关注概率=0.2*0.2=0.04,那么不收藏关注的概论是0.01
- 4、在已知用户购买的情况下:收藏的概率是0.04/(0.01+0.04)=80%
公式解析:
- 设A为关注,B为收藏。 已知
P(A)=5%, P(B)=20%, P(A|B) = 20%。
,所以P(B|A)=P(AB)/P(A) = P(A|B)P(B)/P(A) = 80%
.
假设基准值为数组首元素的快速排序,要使得数组满足非降序排列,下列数据分布导致快排算法效率最低的是__。
- 2-6-3-7-5-1-4
- 6-2-3-5-4-1-7
- 7-5-3-2-4-1-6
- 1-5-7-2-4-6-3
- 1-2-3-4-5-6-7
- 4-1-3-7-5-6-2
解析:基本有序的情况下:快排最慢。所以选择的是1-2-3-4-5-6-7
下列程序运行结果:
- false
- true
- 0
- 1
解析:*false,因为==
默认比较的是地址,引用a和引用b所引用的地址是不一样*的。
String a = "hello";
在常量池中创建了对象String b = "he" + new String("llo");
在常量池中创建了he
,在堆中创建了llo"
关注线程和进行,描述正确的是(多选):
- A:同一个进程的线程之间共享内存,包括堆和栈
- B:线程在资源消耗上通常要比进程轻量
- C:进程的隔离性要好于线程
- D:进程间有途径共享大量内存中的数据
解析:选择BCD
- A选项:栈数据是线程自有的
- B选项:引出线程就是因为(管理/切换/创建/销毁进程)进程消耗资源太多了
- C选项:进程之间的资源是独立的,子进程使用
copy_on_write
技术复制父进程的资源;而同一个进程中的线程共享资源,每个线程拥有自己的栈和相应的寄存器; - D选项:用于进程间通讯(IPC)的四种不同技术:
- 一、 消息传递(管道,FIFO,posix和system v消息队列)
- 二、 同步(互斥锁,条件变量,读写锁,文件和记录锁,Posix和System V信号灯)
- 三、共享内存区(匿名共享内存区,有名Posix共享内存区,有名System V共享内存区)
- 四、 过程调用(Solaris门,Sun RPC)
在一个的程序中有A,B,C三个线程同时对一个文件进行读写操作,其中的A,B是写进程只负责往里面写数据,C是读线程,同时把读取的数据从文件中删除,A线程单独写满文件需要10小时,B线程单独写程序需要6小时,C线程需要15小时才能读取完整个文件,不考虑三个线程之间的相互影响的情况下,现在_小时才能写满文件。
- A. 5
- B. 6
- C. 5.5
- D. 4.5
- E. 4.8
- F. 5.3
解析:选择A
- 不考虑三个线程之间的相互影响,突然回到了小学数学题:“两个水龙头注水,一个放水,问何时注满水池”的感觉。这样问题就简单了:
- 总任务是单位1,A的写工作效率是
1/10
,B的写工作效率是1/6
,C的读工作效率是1/15
,那么总工作效率是1/10 + 1/6 - 1/15
结果是1/5
。于是,写满的总时间是:用单位1除以总工作效率五分之一,就是5小时。
- 总任务是单位1,A的写工作效率是
mysql 数据库有选课表 learn(student_id int,course_id int),字段分别表示学号和课程编号, 现在想获取每个学生所选课程的个数信息,请问如下的 sql 语句正确的是:
select student_id,sum(course_id)from learn
select student_id,count(course_id)from learn group by student_id
select student_id,count(course_id)from learn
select student_id,sum(course_id)from learn group by student_id
解析:选择B
- 获取每个学生所选课程就按照学生分组,统计个数就用count
下列结果正确的是:
class Person {
String name = "do1";
public Person(String name) {
this.name = name;
}
}
class Employee extends Person {
String empId = "0001";
public Employee(String name) {
empId = id;
}
}
class Test{
public static void main(String[] args) {
Employee e = new Employee("test");
System.out.println(e.empId);
}
}
- A. 输出do1
- B. 编译出错
- C. 输出test
- D. 输出0001
解析:选择B
- 这题主要考察对象创建的过程。如果子类的构造函数中没有显式调用父类的构造器,那么默认会调用父类无参的构造函数。但是代码中没有给出父类的无参构造函数,所以编译时不通过的。
IDEA的提示也很准确:
如下javascript代码y最终输出的结果是:
var x= 1;
var y = 0;
function add(n){
n = n+1;
}
y = add(x);
- A. 1
- B. 2
- C. 3
- D. undefined
解析:选择D
- 没有明确的return,返回的是undefined
下列哪些是JSON格式结构(多选)
- A.
{id:'1',name:'do1'}
- B.
['java','javascript']
- C.
{'java','javascript'}
- D.
[id:'1',name:'do1']
解析:选择AB
- JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
- 参考资料:http://www.json.org/json-zh.html
话说{'java','javascript'}
这个在JavaScript算什么?会的麻烦在评论区告诉我一下哈~~
对类成员访问权限的控制,是通过设置成员的访问控制属性实现的,下列属于访问控制属性的是:
- A. public
- B. private
- C. protected
- D. volatile
解析:选择ABC
- 这题Java基础题,就很简单了。volatile是一种轻量级的同步机制。
以下集合对象不是线程安全的:
- A. ArrayList
- B. Vector
- C. Hashtable
- D. Stack
解析:选择A
- 这题也很简单,如果对集合不太了解的同学可看我之前写过的集合文章:https://segmentfault.com/a/1190000014403696
下面描述正确的是(多选):
- A. session是代表与用于某个web应用程序相关的对象和属性
- B. request代表与Web客户机发出的多个请求相关的对象和属性
- C. page代表与web客户机的一次请求
- D. application代表与整个Web应用程序相关的对象和属性
解析:选择AD
- request代表与Web客户机发出的一个请求相关的对象和属性
- page代表与一个页面相关的对象和属性
下列对正则表达式描述正确的是:
- A.
\D
匹配一个数字字符 - B.
\s
匹配任何不可见字符,包括空格,制表符,换页符等等 - C.
\t
匹配一个换页符 - D.
\n
匹配回车换行符
解析:选择B
\D
匹配一个非数字字符。\s
匹配任何不可见字符,包括空格、制表符、换页符等等\t
匹配一个制表符。\n
匹配一个换行符。
\r
匹配一个回车符
Linux解压的命令(多选)
- A. tar zxvf filename.tar
- B. gzip -d filename.gz
- C. gzip filename
- D. tar czxf filename.tar
解析:选择AB
- 考察Linux的解压命令
2.2笔试简答题
已知一个包含10个随机数字的数组,数字不重复,给定其中的两个随机数,获取这两个数在随机数组从小到大排序后在数据中的坐标值。时间复杂度尽量低一些
使用快排的partition,将给出的随机数做基准值返回的坐标就是了。两个随机数就调用两次快排的partition。
// 支点左边都比支点小,支点右边都比支点大
public int partition(Integer[] nums, int target) {
int lt = -1;//[0,lt]<target
int gt = nums.length;//[gt,nums.length-1]>target
int i = 0;
while (i < gt) {
if (nums[i] == target)
i++;
else if (nums[i] < target) {
lt++;
swap(nums, i, lt);
i++;
} else {
gt--;
swap(nums, gt, i);
}
}
// 返回支点的坐标
return gt - 1;
}
private void swap(Integer[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
上边代码由HoldGone友情提供!
Error,Exception,RuntimeException区别
这部分的资料就很多了,我这里就不详细答了。参考一下吧:
有一亿条记录,每条记录有id,ip,时间组成。设计一个系统能够快速查询以下内容:给定ip和时间段(精确到分钟)统计ip的访问次数,请写出创建SQL的语句
答:首先,1000亿条记录全部放到内存肯定不够,那就是分成小文件了,然后整合;
公共的时间段,因为精确到分钟,我们把这每一分钟建成一个小文件,每个小文件肯定会有许多重复的ip,url;
现在统计每个小的文件中url的访问量和ip的访问次数,方法就是建立索引;
(建立索引的目的是为了减少查询次数,但是随着索引级数增多也会造成花更多的时间在建立索引上);
建立url的索引,假如是www.nowcoder.com/question,可以分别给www.nowcoder.com和question建立索引,那么来了一条url,先看一级索引是不是匹配,匹配再看二级索引,相同的话就是我们要的url目标;
ip的索引也是一样,ip分成4段建立索引;
所以这里影响效率的就是在索引建立这块,索引建立好那就是查询的事了的,就会变得非常快。
假定给定了某个时间段,找出url的访问量,那么先找到给定的时间段,对应着刚开始分割的小的文件(每一个分钟)中搜索,通过索引找到相同的url之后,开始统计,直到搜索完所有的给定时间段内的所有的小的文件;
求ip的访问次数也是一样,按照给定的时间段,找到对应的小的文件,通过索引找到相同的ip后统计,直到搜索完了给定时间段内的所有的小的文件。
2.3初面
- 简单介绍一下你自己
- 面向对象有什么特性?你如何理解面向对象的
- 面向对象与面向过程哪个更好写?
- 谈谈AOP,AOP在实际项目/实际能做什么?
- 如果让你实现Spring的缓存@Cacheable,你会怎么实现?(面试官想问的是AOP,我把他带到Map那边了)后来才说到了AOP。
- 索引是怎么提高查询的性能的?具体来说说索引。
- 既然说String是不可变的,那么
String s = "aaa"
,为什么同样可以执行a = "bbb"
? - String是怎么做到不可变的?final修饰的类中的成员变量是否可变?确定吗?String什么时候被销毁?
- 看你使用过Nginx,讲讲Nginx。正向代理与反向代理有什么区别?
- 看你使用过RESTful,讲讲PUT/GET/POST/DELETE分别的含义,使用RESTful和非RESTful的URL有什么区别?
- 看你用过Elasticsearch,你知道bool是什么吗?Elasticsearch能使用root用户执行吗(我回答的是可以)?为什么?用root用户执行和其他用户执行有什么区别?
- 你项目是部署到Linux的,你记得Linux修改权限的命令是什么吗?读写执行分别代表的是什么?777,每个7的代表什么。
- 密码是用md5加密的,那md5是可逆的吗?那如果现在想实现一个功能:用户想要找回自己的密码(不是修改密码,单纯找回密码),那现在md5是不可逆的,那你怎么设计呢?
- 了解过多线程吗?你知道线程池默认有哪几种实现吗?如果线程池满了,那其余的线程怎么办?工作队列是怎么实现的?工作队列是先进先出的吗?可以优先执行工作队列的某线程吗?
- 你用过Redis吗?,后面又问了一些Redis安全性的东西。
- 你知道什么是分布式和集群吗?
- 在集群的环境下,Session一般怎么解决?
- 在集群中如果redis down掉了怎么办?第二台redis又down掉了怎么办?
2.4复试
- 简单介绍一下你自己
- 面向对象有什么特性?你如何理解面向对象的
- 了解String常量池吗?
String s = "aaa";
和String b = "aaa";
相比,它俩会相等吗? - 简单介绍一下你写过的项目。
- 我看你用到了Shiro,Shiro是什么东西呢?简单说说你在项目中是如何使用Shiro的
- Elasticsearch又是什么东西呢?简单说说你在项目中是如何使用Elasticsearch的
- 你一般用的数据库是什么?Mysql的索引了解过吗?可以简单说说嘛?
- Mysql有没有比int类型还要小的整型类型?
- 来说说你项目还有什么功能。(我谈了个人备忘录,使用了Quartz任务调度框架–>cron表达式–>发邮件提醒)
- 现在有这么一个需求:一个用户可以填写多张调查问卷。调查问卷的数据是不确定的,可以是性别啊,工作年薪呀,等等等。现在你数据库怎么设计呢?
2.5公司B面试总结
经过上一家面试的总结,我带了一个本子和笔去面试,面试官提问的时候我会在本子上写写,画画图来告诉面试官表现我的思路。
公司B是我面的第二家公司:总的来说这次面试遇到了我一大堆不懂的东西,可以说被面试官虐了。面的题目都是相对开放的,问我某个功能如何设计、如何实现、是否可以使用某项技术实现这个功能。
对Redis/数据库设计/数据库SQL编写/Elasticsearch**知识点储备还是不够**啊~~这些知识点得多加把劲了.
2018年6月21日12:52:05,今天早上拿到offer
三、公司C
3.1笔试选择题
下列关于注释语句的描述中,正确的一项是。
- A.以/开始,/结束的是单行注释语句
- B.以//开始的是多行注释语句
- C.以/*开始,/结束的是可以用于生成帮助文档的注释语句
- D.以/*开始,/结束的是单行注释语句
解析:选择C
- A是多行注释
- B的单行注释
- D是文档注释
为了区分重栽多态中同名的不同方法,要求
- A. 形式参数个数或者类型不同
- B. 返回值类型不同
- C. 调用时用类名或对象名做前缀
- D. 形式参数名称不同
解析:选择A
下列哪一个说法是正确的
- A. Java程序经过编译后会产生机器码
- B. Java程序经过编译后会产生字节码
- C. Java程序经过编译后会产生DLL文件
- D. 以上都不正确
解析:选择B
在Java中,下列运算符合法的是
- A. &&
- B. < >
- C. if
- D. :=
解析:选择A
下面定义数组的格式中不正确的是
- A. int a[10]
- B. int a = new int[10]
- C. int a[]
- D. int[] a = new int[]{10}
解析:选择B
下列哪一个说法是正确的:
- A. 实例方法可以直接调用超类的实例方法
- B. 实例方法可以直接调用超类的类方法
- C. 实例方法可以直接调用其他类的实例方法
- D. 实例方法可以直接调用本类的类方法
解析:选择A
可以用来修饰interface的是
- A. private
- B. public
- C. static
- D. protected
解析:选择B
以下哪个表达式是不合法的。
- A.String x=”hello”;int y=9;x+=y;
- B.String x=”hello”;int y=9;if(x=y){}
- C.String x=”hello”;int y=9;x=x+y;
- D.String x=null;int y=(x!=null)&&(x.length()>0)?x.length():0;
解析:选择B
线性表采用链式存储时,其地址:
- A.必须是连续的
- B.部分地址必须是连续的
- C.一定是不连续的
- D.连续与否均可以
解析:选择D
关系数据库中的“关系”是指:
- A.各条记录彼此都有一定关系
- B.各字段数据被此都有-定关系
- C.数据模型是一个满足一定条件的二维表
- D.表文件之间存在一定关系
解析:选择C
以下对抽象类的描述正确的是:
- A.抽象类没有构造方法
- B.抽象类必须提供抽象方法
- C.有抽象方法的类一定是抽象类
- D.抽象类可以通过new关键字直接实例化
解析:选择C
- A:抽象类是有构造方法的
- B:抽象类未必需要提供抽象方法
- D:抽象类既然是抽象的,怎么可以直接new实例化呢
以下对接口描述错误的有:
- A.接口没有提供构造方法
- B.接口中的方法默认使用public、abstract修饰
- C.接口中的属性默认使用public、static、final修饰
- D.接口不允许多继承
解析:选择D
以下对异常的描述不正确的有
- A. 异常分为 Error 和 Exceptipn
- B. Throwable是所有异常类的父类
- C. Exception是所有异常类父类
- D. Exception 包括 RuntimeException 和 RuntimeException 之外的异常
解析:选择C
- Throwable是所有异常类的父类
在try-catch-finally语句块中,以下可以单独与finally —起使用的是
- A. catch
- B. try
- C. throws
- D. throw
解析:选择B
下列关于for循环和while循环的说法中哪个正确的?
- A.while循环能实现的操作,for循环也都能实现
- B.while循环判断条件一般是程序结果,for循环判断条件一般是非程序结采
- C.两种循环任何时候都可替换
- D.两种循环结构中都必须有循环体,循环体不能为空
解析:选择A
- B:判断条件和结果无关系
- C:for(init;test;;increment) ,while(test) 由此可见,当for语句的初始化及自增部分为空时才能替换
- D:虽然空循环体没意义,不过都是可用的.
下列关于构造方法的叙述中,错误的是:
- A. Java语言规定构造方法名与类名必须相同
- B. Java语言规定构造方法没有返回值,但不用void声明
- C. Java语言规定构造方法不可以重载
- D. Java语言规定构造方法只能通过new自动调用
解析:选择C
- 构造方法当然可以重载了
下列哪些语句关于Java内存回收的说明是正确的?
- A、 程序员必须创建一个线程来释放内存
- B、 内存回收程序负责释放无用内存
- C、 内存回收程序允许程序员直接释放内存
- D、 内存回收程序可以在指定的时间释放内存对象
解析:选择B
结构化程序设计所规定的三种基本控制结构是
- A. 输入、处理、输出
- B. 树形、网形、环形
- C. 顺序、选择、循环
- D. 主程序、子程序、函数
解析:选择C
给出以下代码,请问该程序的运行结果是什么?
class Example{
public static void main (String args[]){
boolean b=true;
System.out.println(b);
}
}
- A.打印输出true
- B.打印输出1。
- C.编译错误,因为sout的参数只能为整数 ..
- D.编译错误,如果把true改变为TRUE,则可使代码编译通过。
解析:选择A
3.2笔试题不定选
下列属于关系型数据库的是:
- A. Oracle
- B. MySqL
- C. IMS
- D. MongoDb
解析:选择AB
- C:是层次数据库
- D:是非关系数据库
以下属于面向对象的特征的是()。
- A.重载
- B.重写
- C.封装
- D.继承
解析:选择CD
在使用super和this关键字时,以下描述正确的是:
- A. 在子类构造方法中使用super ()显示调用父类的过早方法,super ()必须写在子类构造方法的第一行,否则编译不通过
- B. super ()和this ()不一定要放在构造方法内第—行
- C. this ()和super()可以同时出现在—个构造函数中
- D. this ()和super()可以在static环境中使用,包括static方法和static 语句块
解析:选择A
- 1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
- 2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
- 3)super()和this()均需放在构造方法内第一行。
- 4)尽管可以用this调用一个构造器,但却不能调用两个。
- 5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
- 6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
- 7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
以下关于final关键字说法错误的是:
- A. final是java中的修饰符,可以修饰类、接口、袖象类、方法和属性
- B. final修饰的类肯定不能被继承
- C. final修饰的方法不能被重载;
- D. final修饰的变量不允许被再次赋值
解析:选择AC
- final修饰类、方法、属性!不能修饰抽象类,因为抽象类一般都是需要被继承的,final修饰后就不能继承了。
- final修饰的方法不能被重写而不是重载!
- final修饰属性,此属性就是一个常量,不能被再次赋值!
访问修饰符作用范围由大到小是:
- A. private-default-protected-public
- B. public-default-protected-private
- C. private-protected-default-public
- D. public-protected-default-private
解析:选择D
根据下面的代码,
String s = null;
会抛出 NullPointerException 异常的有:
- A. if( (s!=null) & (s. length()>0))
- B. if( (sl=null) && (s. length()>0))
- C. if( (s==null) | (s. length()=0))
- D. if( (s=null) || (s. length()==0))
解析:选择AC
- 出现异常主要是因为执行了s.length()这句话,所以A、B、C、D选项中只要没有执行到这句话的都是不会报空指针异常的。然后考查的第二点是短路逻辑运算符和非短路逻辑运算符。&和|为非短路逻辑运算符,无论两个语句为什么,一定会执行完毕,所以A、C两个是会报出异常的。
Java中,哪个接口以键值的方式存储对象
- A. Collection
- B. Map
- C. List
- D. Set
解析:选择B
Java接口的修饰符可以为:
- A. private
- B. protected
- C. final
- D. abstract
解析:选择CD
- 这里的题目应该是Java接口可以出现的修饰符有哪些,所以我将C选上了。就看个人的理解吧~
以下哪些代码片断正确:
- A. private final int theNumber = 017;
- B. public int theNumber = 017;
- C. public int theNumber = (octal)17;
- D. public int THE_NUMBER = 017;
解析:选择ABD
以下哪些代码片断正确:
- A. public transient static final int_FRAMEX =850;
- B. private transient static final int_FRAMEX2 =850;
- C. boolean b = 0;
- D. this(“a”,”b”);
解析:选择D
- AB都没有给出类型是什么
- C明显就是错的
3.3笔试简答题
JRE/JDK/JVM分别指什么?他们的关系是怎么样的?
接口和抽象类的区别是什么?
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用了?
简述Java的接口和C++的虚类的相同和不同处
JSP和Servlet有哪些相同和不通点,他们之间的联系是什么?
什么是流,流经常按照哪几种方式分类,每种方式又将流各分为哪几类?他们之间的区别是什么?
其实这些简答题每个人写出来可能都会不一样,按自己的理解大胆写就可以了!
3.4面试
这次面试问的技术并不是很多,主要问的日常的东西~~~
- Shiro你当时是用来干嘛的?有创建用户与角色/权限的表来维护吗?
- 你会使用Linux吗?能搭建环境吗?
- 简单介绍一下你写过的项目
3.5公司C总结
做的笔试题都是Java基础,挺合我胃口的(hahaha)
- 跟hr+技术聊
- 再跟hr聊
- 最后跟总经理聊
拿到了offer
四、公司D
4.1笔试题
在拿到试题的时候,前台告诉我限时40分钟做完,我以为就她说说。后来40分钟过去了,我剩下一题选择题还没做出来,卷子就收走了。我凭记忆简单说一下题型吧。
选择题:
- 给出先序和中序的遍历结果,问后序的遍历结果是什么
- 连续几道关于
|
,||
,&
,&&
的选择题,写程序结果是什么 - 一道是outer,inner的多循环判断,其中一个地方break掉outer循环,问其中的变量值等于多少
String s = "a1";String s2 = "a"+1
,连续几道类似的题目,问结果- 还有一些流程控制,问程序结果的题。
- …其他的忘了…
SQL题:
- 根据名字模糊查询,写出sql
- 多表查询(这题现在想起来,我还忘记做了……)
程序题/简答题:
- 删除某个文件目录下的所有文件,包括目录
- 现在有一个线程A写N个数据进队列,有两个线程往队列取数据。
- 典型的生产者和消费者,参考:http://www.cnblogs.com/xiaotao726/p/5476644.html
- 类的加载过程
- 类加载的过程包括了加载、验证、准备、解析、初始化五个阶段
- 现在机子是2G内存,现在我有10G数据,现在我想对这些数据排序,如何设计呢?
- 这题没找出对应的答案啊(我自己写的是放在nosql数据库中排序的)。类似的参考一下:https://zhuanlan.zhihu.com/p/28831563
4.2初面
- 简单介绍一下你自己
- 你觉得你在学校学习比较好的课程是什么?
- 你说你自学Java,你觉得自学和老师上课的方式这种有什么区别?
- 你觉得哪些是你自学没学到,在老师那里学到的。还有就是哪些是你自学学到的,在老师那里没学到的。
- 你觉得你擅长什么?可以简单说说嘛?(我选了Java集合)
- 那你简单说说ArrayList和LinkedList的东西吧(我就说我看过源码,以及说了底层的一些东西)
- 为什么说ArrayList增删慢呢?为什么说LinkedList查询慢呢?
- 你说你知道ArrayList在增删改的时候用的arraycopy()方法,你知道它是怎么实现的吗?
- 看你用过Cookie,简单说说Cookie是什么吧,为什么需要Cookie
- Cookie一定是服务端发送过去的吗?是怎么发送的?
- 使用的时候Cookie有什么弊端(需要注意些什么)?
- get和post有什么区别?
- 使用post方式的时候,在url上可以拼接参数吗?
- 来说说http的状态码有哪些
- 分别谈谈这些状态码都代表什么意思
- 上面已经说了get和post了,那你还知道http有其他的原语吗
- 来说说https吧,https是什么东西
- 你知道https的工作流程吗?
- SSL???忘记问什么了,这个我不会。
4.3公司D总结
笔试题大多都是考Java基础,也不算难。就是题量有点多,就给40分钟可能有点紧。
总的来说初面考HTTP的知识比较多,这方面还得深入加强一下。
2018年6月21日12:52:25,今天早上收到邮件,一面不过。
五、公司E
5.1面试
这家也主要围绕着简历来问:
- 简单介绍一下你自己
- 你在学校时间有没有做过什么课程设计?简单说说
- 我看你做过商城项目,你当时是怎么做的呢?
- 你认为这个商城项目最难的地方是在哪?你实现了之后,能运行吗?
- 那个商城项目有多少人在使用呢?
- 简单讲讲Hibernate和Mybatis的区别
- 你学过Struts2啊,简单说说与SpringMVC的区别
- 常用的NIO框架有哪些?除了netty你还知道有哪个吗?
- 你的技术文章是写在哪里的?
- 简单介绍一下Java集合吧
- 短信验证你是怎么实现的?
- 说说你是怎么理解SpringBoot的
- Redis了解过吗
5.2公司E总结
主要问某项技术是如何理解的,看你是否理解了这项技术。
拿到offer
六、总结
花了半个月时间吧,写简历–>投简历–>收到面试邀请–>约面试时间–>面试–>(中公司有二面,大公司可能更多)–>拿到offer(或者拒绝)
最后的成绩:面了5家公司,拿到4个offer。
至于在Java实习生广州的薪酬方面,不同公司给出的薪酬都不一样。有的公司按天数算(上班天数),也有按月算。呃,就我个人认为在广州大部分给出的薪酬在2500-3500。
- 有的工资给得比较低,但中午是有餐补的,有提供住宿的。
- 有的工资给得比较高,但没有餐补,没有住宿。
通过这次面试,还是发现自己薄弱的地方有很多啊,得多补补才行,面试也没想象中那么刁难。
下一篇我就整理点我在面试前找到的,或者觉得比较好的资料吧~~
好久没写过文章啦~~~实习了以后应该就不会像在学校的时候更新那么频繁了,可能一个星期一篇?这我也不确定,反正文章总结我还是会写的。还有好多好多想学的,想写的呢。
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友
文章的目录导航:https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang