百度实习生一面与二面、用友实习生一面(Java开发)

时光毁灭记忆、已成空白 提交于 2019-12-09 17:44:47

百度一面:
电话面试,问的东西比较广,时长34分59秒
1、自我介绍
2、介绍一下项目
3、知识点的连环攻击,问到你不会为止

  • GC回收算法
    主要有计数器算法和可达性算法
    计数器算法:即对象被引用 为其加一 ,未被引用,为其减一 ,如果计数器数字为0,即可将对象GC回收
    可达性算法(root):可达性算法是根据有向图的方式进行对象间关系的连接的,如果一个对象并没有被root进行有向图走向连接到的话,这个就可以进行GC回收
    如果相对一个对象进行回收,也可以手动调用System.gc()的方法

标记清除、标记整理、复制、分代
标记清除:就是将要被回收的对象标记出来,然后进行清除,但是这样会造成很多的,内存碎片
标记整理:就是同样将要被回收的对象标记出来,但是进行清除时,会将
后面的对象进行移动,减少了内存碎片的产生,但是会造成资源的浪费
复制:将内存区域分为了左右两个区域,将不需要回收的对象复制到另一边,但是这种情况会让我们实际能够进行应用的内存区域缩短了一半
分代:主要是将内存区域分为新生代和老年代,新生代包括eden和from suvior和to suvior区 比例时8:1:1,主要使用的是复制算法
老年代中存放的是在每一次换区都会为他们进行+1,好像+到6就可以被存放到老年代,然后老年代使用的就是标记整理算法了,可能也是在老年代的元素不会轻易的就被删除,所以使用标记整理不会那么的浪费资源,也不会产生内存碎片

GC在面试用友和阿里电面的时候都被问及了 jvm底层还是一般大厂比较看重的基础吧

  • 内存结构
    线程私有:
    程序计数器:起标识作用的(虚拟机字节码指令的地址)
    本地方法栈:本地方法native
    虚拟机栈:变量名 基本数据类型
    线程共享:
    堆:对象实例 数组
    方法区:类信息 常量 静态变量等

引出 下一个问题: 堆和栈的区别
主要从存储数据 GC回收 讲了一下
继而 引出 类加载机制
将字节码文件加载进入内存中 形成Class 当要生成对应的实体对象时再通过类加载器进行加载对应的Class,实例化对象,通过双亲委派机制

于是 何为双亲委派机制
就是子类加载器拿到实例化对象请求时 先不会自身去进行实例化,而是会将这个请求委派给自己的父类 当父类没有对应的Class时才会由自己进行类的加载与实例化

  • 关于了解的设计模式
    设计模式真是被问了太多次了 但是的确 没有太仔细了解过 除了平常使用时接触过的一些

  • 单例模式
    懒汉式(线程不安全,可以使用双检查锁机制)
    饿汉式(线程安全)
    举例: spring中 在ioc容器中为我们创建的对象就是默认单例模式的
    只有修改对应的scope属性才会更改

  • 代理模式
    分为静态代理和动态代理
    在mybatis中 对应的mapper接口和mapper映射文件之间的对应关系

  • 工厂模式
    主要是在spring中DI依赖注入时可以采用工厂方式注入

  • 又问了我关于线程池的一些操作,但由于我并没有实际操作过线程池,所以只是说自己听说过 主要是用来存放线程的

后来大部分问题都是关于数据库的
比如搜索引擎: innodb
使用的索引结构: b+树 多路平衡二叉树
多路平和二叉树 也是因为从根节点到每一个叶子节点的距离都相等,且满足左小于跟小于右,且b+树更支持范围查找,而Hash只支持等值查找

还有聚簇索引和非聚簇索引:
聚簇索引:即叶子节点之存储的是主键的信息,根据主键的信息你可以去查询到这一整行的信息
非聚簇索引:则是将整行信息全都存到了我对应的叶子节点上
还问了 关于redis数据库的一些信息
可以参考之前的那篇文章点他
补充
mysql数据库与redis数据库存储数据区别
mysql数据库是类似于表格存储的数据库,就是即使你在对应位置没有数据,他也会将对应的位置留出来,就是那种纵向存储
而redis数据库 是横向存储的,类似文本存储,有多少数据存多少,不会出现数据为空还要硬存的现象

百度二面:
主要就是对项目的了解,由于我的项目做的还蛮简单的,也没有太考虑到安全性管理权限方面的,面试官就我的项目管理权限方面进行了一些交流,面试官比较好,全程都在笑,还说我不要太紧张,觉得面试应该是一件轻松的事情吧,哪怕这一次没有机会进入贵公司,但是如果能够和这个行业的大佬们进行一次交谈,也会让自己受益匪浅的吧

用友一面几乎也问了很多和底层有关的知识点,高频出现的都有所整理了可以参考京东面试过程记录hashmap底层原理
补充:在1.8以后之所以会使用数组+链表+红黑树的原因主要是链表的时间复杂度为O(n)而红黑树的数据结构为O(nlogn)
所以在发生大量的hash冲突时使用红黑树可以减少使用的时间

还问了关于锁的问题

  • 公平锁与非公平锁
    当时看过一眼,但是记得不太清了,所以面试官又给讲了一下
    公平锁:即当一个资源被锁定的时候,其他线程想要使用这个资源就会根据在线程队列中排队的顺序进行对资源的使用
    非公平锁:就是当这个被锁定的资源释放时,谁先抢到就是谁的
  • 然后我就讲了一下我了解过的乐观锁与悲观锁点他
  • 然后谈及了cas算法
    即关于CurrentHashMap上面有介绍
    然后还有hashset与hashmap关系点他进

还能记起的,都在这里了,希望对你有所帮助

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!