天眼查一面
当时忘记录屏了,凭印象写,直接开始
面试
- 写代码吧,合并两个有序数组(这个在美团一面的时候也考了,写的时候还是紧张,不过不是很难,写完了面试官看了看说逻辑没有问题)
- 实习的经历都做了什么,有什么产出(就一个月的校企联合实习,说了说干啥了,没产出)
- 第一个项目当时有几个模块(那个小项目没有啥模块的概念,把功能说了下,项目这块感觉自己是太水了)
- 进程和线程的区别
进程:资源分配最小单位;线程:cpu调度的最小单位
进程切换开销大;线程切换开销小
进程有自己的资源,有自己的堆;而线程有自己的栈和pc计数器,共用进程的堆空间
在Java中,Java运行时JVM是一个进程,其他任务都以线程执行
- 创建线程有几种方式(自己说三种,但是只答出来继承Thread和实现Runnable接口的方式,第三第四种前两天刚看过)
继承Thread重写run
实现Runnable接口重写run
实现Callable接口重写call方法,然后new FutureTask(对象)创建一个task对象,然后new Thread(task).start执行
用ExecutorService和Executors实现线程池,先Executors.newFixedThreadPool(number)获取线程池对象ExecutorService,然后把上面的对象强转成ThreadPoolExecutor的对象然后set一些参数,执行execute方法会开启一个Runnable的run方法;执行submit会开启一个Callable的call方法
- 说下Java集合(栈、队、List、Set、Map都说了下。面试官:答得不错)
- Java类加载机制,比如一个静态成员变量,一个静态方法,一个成员方法,怎么加载(不会)
加载机制其实就是加载过程
加载:通过一个类的全名来获取其二进制字节流(不一定非要从.class获取,jar包、网络、jsp等也可);将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;在堆中生成一个类的class对象作为访问入口;此过程由类加载器完成
连接:
- 验证:确保class文件中的字节流包含的信息符合当前虚拟机要求且不会危害虚拟机安全,会完成文件格式、元数据、字节码、符号引用这四个的验证
- 准备:正式为类变量static分配内存并设置类变量初始值(系统默认初始值,被final修饰的是直接给设定值),都在方法区中分配
- 解析:将常量池中的符号引用转化为直接引用
初始化:初始化类变量的设置值,执行类构造器的<client>()方法,更多的这里写不下了
- cookie和session的区别(也是高频面试题了,没看)
cookie是基于本地存储,session是基于服务器存储
cookie不是很安全,获取到cookie文件后可以通过解析cookie来获取用户信息并进行cookie欺骗,安全方面用session(但是cookie可以加密)
session是基于和服务器的连接的,会一定时间保存在服务器上。如果短时间访问过多生成太多session,会占用服务器性能,考虑性能用cookie
单个cookie能保存4K数据,很多浏览器对一个域名的cookie数量有不同的限制,session没有数据量限制
cookie保存String类型,session保存Object类型
session依赖于sessionID,但是sessionID保存在cookie中;但我们也可以在url中传输sessionID
- mysql有几种引擎(我只知道有innoDB,不过也不敢说,怕往下问)
innoDB、Myisam比较常用的就是这两种
- mysql底层怎么存储(不会)
- 如果一个sql语句查询比较慢,怎么搞(我也没看,说了下可能没用索引、用了嵌套查询)
反问
9. 项目上有啥推荐我能再做一个(无所谓,就算是老的框架,关注的重点也是里面的底层和项目的逻辑知识)
10. 公司对应届生的技术最低要求是什么(集合、数据库(课本里的、优化)、实践应用)
11. 公司是在北京是吗(是)(也没说有其他分公司)
然后就结束了,面试官小哥人很nice,还让我先挂电话。
后面有个插曲,给我又打过来说跟hr商量下改天二面,让我最近把那些不会的补充一下。