本帖最后由 逆风TO 于 2018-5-28 11:03 编辑
公司名称:中软国际 公司地址:西安雁塔区天谷八路西安环普科技产业园 公司规模:10000+人
主要业务:华为线 公司环境:如下图所示 面试之前:
按照套路填写之前上班的公司,这个不用多说该怎么做你们心里没点逼数么,之前公司的联系人,之前公司的薪资,期望薪资,等等一系列
人事面: Q:一位漂亮的小姐姐迎面走来,你好 A:你好 Q:你之前了解我们公司吗? A:了解了解,非常大的外包公司,西安主要的业务线是华为的项目。 Q:你打算在西安待多久? A:我打算在西安长久发展,打算在西安买房,毕竟房价相对便宜些。 Q:好了,我觉得你还行,稍等一下我联系一下我们的技术,让他给你面试
A:好的,谢谢
笔试题:
没有笔试题,如果有题咱也不要怕,告诉你们一个经验,把笔试题拍个照片发到咱们的班级群里,依靠大家的力量,我相信你可以做完的
面试题:(只挑有技术含量的写了) Q:你好
A:你好
Q:说一下java的垃圾回收 A:首先说一下垃圾确定算法:引用计数法:垃圾回收器会遍历对象列表,清理引用数为0的对象。缺点:两个对象互相引用时,清理不掉。可达性分析:思想---所有存活的对象,一定能追溯到其存活在栈(虚拟机栈/本地方法栈)、堆或方法区中的引用。也就是从GC Roots开始遍历,游离在引用链之外的对象视为垃圾。 目前主流虚拟机采用的是分代收集算法:主流JVM的垃圾回收算法,把堆分为新生代、老年代;方法区对应永久带。新生代(Minor GC):刚初始化的对象,状态不稳定,每次垃圾回收时都有大量对象被回收,具有朝生夕灭的特性。大部分垃圾收集器对于新生代都采取复制算法,因为复制对象的次数较少。一般来说是将新生代划分为一块较大的Eden(伊甸园)空间和两块较小的Survivor(幸存者)空间(一般为8:1:1),每次使用Eden空间和其中的一块Survivor空间,当进行回收时,将Eden和Survivor中还存活的对象复制到另一块Survivor空间中,然后清理掉Eden和刚才使用过的Survivor空间。新生代实际可用的内存空间为自身的90%。对象在Survivor每熬过一次Minor GC,年龄加1,默认15岁时移到老年代(也不一定,有一些较大对象,需要较大的连续空间,可能直接就进入了老年代)。 老年代(Full GC或Major GC):对象比较稳定,每次垃圾收集时只有少量对象需要被回收,一般使用的是Mark-Compact算法,也有说是标记-清除算法。永久带(方法区,或叫“非堆”):程序运行期间都不会被回收,一般存储类的字节码文件、常量或静态变量。 Q:说一下秒杀活动怎么处理 A:秒杀的难点在于高并发,为了保证库存安全和程序性能,需要借助缓存提高性能瓶颈,当然,如果并发量不大也可以直接使用数据库的乐观锁处理。如果并发量比较大的话,需要借助Redis或memcache等缓存技术。使用Redis的话,商家提交的秒杀申请被审核通过后,将商品信息和库存存入Redis,秒杀开始后,用户请求先到达Redis,如果库存足够就秒杀成功,库存不足则返回失败,秒杀活动到期后,定时任务将用户订单存入mysql。当然也可以使用Redis分布式锁完成用户请求的过滤。 Q:说一下单例模式: A:单例模式具体实现方式非常多,有饿汉式、懒汉式、双检锁、私有静态内部类、枚举等。饿汉式是在类加载的时候由静态成员变量位置创建对象;懒汉式则是在用户在第一次调用方法的时候创建,但是高并发时会有安全隐患,由此引申出双检锁模式;但是网上有人说双检锁模式也不安全,涉及到java指令重排序问题,导致用户获取的单例对象可能残缺,需要用volatile关键字修饰成员变量,但是这种错误我曾经模拟过很多次,根本测试不出来,所以我很怀疑;私有静态内部类的方案是一种不错的方案,既能延迟对象的初始化时机,又能保证安全性;最后一种枚举方案是我比较喜欢的,因为代码简单,而且安全,尤其是用户无法通过暴力反射来打破单例状态,但是它的初始化时机也是类加载时初始化。
Q:这个薪资我们可以给到,你还有其他的问题要问吗?
A:你们其他待遇有吗?
Q:五险一金了啥的都有,有时候需要加班
A:好的,没有其他问题了
Q:我们需要下周入职
A:好的,好的
面试总结:
总的来说面试的的比较深,但是我们要保持一个态度,知道的东西一定要回答的比较全面,情景题不管怎么滴都要给面试官提供一个自己的解决方案,不管对错,按照自己的理解去说,面试过程中一定要保持好必要的礼貌
|