美文网首页
2018-03-16 记一次面试----java

2018-03-16 记一次面试----java

作者: sxqiong | 来源:发表于2018-03-19 13:10 被阅读143次

    这是我毕业以来第一次面试,是一家初创公司,也是一个做saas的公司,起初在BOSS上聊了几句,职位是java主力开发(大概就是那种使劲干活不要命那种),然后就电聊了45分钟,接下来就约定第二天面试。
    刚到公司,说实话公司环境比较拥挤(可能是因为现在的公司太大了哈哈哈),然后就从人群中站出来三个人,后来才知道一个前端架构师,一个后端架构师,一个经理,这阵容我也是慌了一下,第一个问题wait和sleep的区别,可能是还没缓过神来,从前特别清楚的问题一瞬间不知道怎么表达-_-,估计还是不够扎实,然后就看架构师翻着手机的面试题,一个一个问,从以下几个部分来整理这些问题吧,也算是给大家一个方向:


    宝儿姐镇楼

    java基础部分(从java基础、面向对象,到GC、jvm,这些知识还算清晰,也可能是进入了状态hhh)

    • Long l1=124L;Long l2=124L; l1==l2?
      这个lz没有思考就说了true,并且说如果大于127就是false,他也没继续问原因,我也就没继续说下去。

    • 说一下String,StringBuffer,StringBuilder,为什么String加法运算费性能
      StringBuffer线程安全,StringBuilder不是线程安全的,String 内部包含final的char[] ,所以每次操作都会生成个新的数组,但是在java8以后String加法操作进行了重载,底层StringBuilder实现,比原来省性能。

    • 刚刚你说到java8,java8有哪些新特性?
      我常用的是stream,balabala(说了些函数式编程),还有Optional类,balala(其实还有很多新特性,只不过平时没用过没底气说)

    • 重写重载区别(这个太基础),那你说返回值类型不同算不算重载
      当然不算,因为我们并不是所有时候都去关心返回值,所以当执行a()你也不知道是要int的返回值还是void的,所以也不能作为依据来确定用哪个方法。

    • 重写中子类和父类的异常关系是这么个约束
      子类中可以不抛出异常,或抛出更详细的异常

    • 说一下GC过程
      首先,需要判断对象的存活性,主要有两种方式,第一是引用计数,但是会造成abba问题,第二个方法是可达性分析算法,当创建对象时候就像根节点或某个子节点挂载,当某个对象到根节点无可达路径则判定对象死亡,HotSpot用的是这种算法,当对象被标记两次才有可能被回收,回收算法有有很多,标记清除,标记整理,复制算法(说了下不同算法的优点和适用场景),不同的GC使用的算法不同,一般来说会根据不同的代来进行不同的回收机制,java8中默认是G1回收器。(回答这部分问题的时候面试官在中间会时不时的冒出问题···)

    • jvm问的就比较少了,还是我自己主动提的,比如在java8中永久代被元空间取代,内存模型啊,对象创建过程,分配内存的CAS算法等等等,但面试官好像不是很感兴趣···

    框架(Spring,SpringMVC,SpringBoot)

    • 你用过Boot吧,说说你了解哪些?
      (黑人脸,我不知道从哪说起啊,太多可说的了)我就从IOC AOP 动态代理两种实现方式(后来想想,其实回答的不对,这都不是Boot的优点,常挂在嘴边的习惯大于配置竟然没说···)

    • 刚刚你提到动态代理,你说一下动态代理的默认机制
      spring4中优先是动态代理,若代理的对象无接口,则用CGlib的方式来进行动态字节码的代理。

    • Mybatis接触过么
      我们持久层用的hibernate,但是我写过一些demo,相比于hibernate的全自动,mybatis的半自动化更灵活和轻快吧,sql基础好学这个应该不难,之前解决过其他项目组的bug(balala叙事)

    • 了解Dubbo么
      我们服务发现治理用的是Eureka,一直也没什么机会接触,但好像阿里最近推崇的是HSF(面试官表情很耐人琢磨)

    • 开启定时任务怎么开启
      需要加@EnableSchduling注解

    • 框架的事基本就聊到了这

    数据库

    • 说说事务的隔离级别
      串行、重复读、已提交、未提交(balalalalala)

    • 幻读和脏读区别是啥
      幻读:一个事务修改了全部列,这时另一个事务插入了一行,这时候就好像之前的修改没生效,发生了幻觉
      脏读:就是一个事务修改某个数据未提交,另一个事务读取这个数据造成脏读

    • mysql存储引擎知道哪些?有啥特点?
      我只知道Innodb,这个问题过了(说到这我已经口干舌燥不想说话了····也不给杯水),这部分在我学习计划靠后的地方,毕竟我才转型java不到一年,还有很多要学。

    • 查询如何优化
      一般建立索引就可以,再有就是对null 尽量设置初始值(balala这个问题网上一大堆只记得这些了)

    • 事物有什么意义
      保证了一些操作的“原子性”,保证数据的准确(举转账例子balala)

    • 分布式事务怎么解决
      这部分我只是了解一点JTA,它是通过分段提交保证了事务ACID。阿里有个GTS好像对分布式事务有较优的实现,但是做成了产品没开源。

    • ACID你知道都是啥么
      (我自己提的hhhh)原子性,一致性,隔离性,持久性(看来又不想继续深问···)

    • 我看你用过redis?redis有哪些数据类型
      我用过codis,是go实现的redis的集群化(这样形容并不准确)(数据类型我没回答,我知道有字符串、哈希表、List、Set、有序列表),我只是负责搭建这样个环境,修改原有的脚本,适用于实际的开发环境。

    • redis存json有什么弊端?
      我犹豫了一下,我本想说转对象时费性能,但是我觉得问的是redis本身的弊端,然后也pass了,现在想想好像就是性能问题···

    设计模式

    • 谈谈你知道的设计模式
      设计模式太多了,我们也不会说用其中一种,在使用的时候这些模式经常需要变种,模式本身就是给开发者提供一个开发思路,主要思想就是抽离不变的,封装变化的,多用组合少用继承,针对接口编程,不针对实现,然后遵守下开闭原则。(balalala)

    • 观察者模式知道么?项目中有哪些场景?
      (说实话我对记名字真的是····)发布通知?项目中···难以具体举例啊,现在想想其实reactor就是一个较为合适的例子,异步通知····

    • 那你举一个生活中的场景吧
      报纸?天气预报?(都不恰当)

    前端

    • 看你以前做过web架构,说说负责哪部分?你对前端架构有什么理解
      balabala叙事,架构就是骨架,抽离出脱离业务不变的部分,进行一个业务的统一默认实现,前端的架构还包括一些插件的整合。

    • 估计因为我是面试java开发,所以web基本没问太多 ,angularjs的指令双向绑定 vue的钩子函数,生命周期这些都没问(失望脸装逼失败)

    shell

    • shell基本没问什么实际问题,我就是说我自学写过几个脚本,公司一直在用,三剑客(awk、grep、sed)都没问,但估计其他的公司还是会问的。

    其他

    • 谈谈你对rest的理解,和rpc的区别
      rest我个人理解就是一种风格规范,对于前后端分离这种,我实际感受到的最大的好处就是定义规约就容易形成“默契”,根据接口就能判断他的业务含义,然后前端独立开发的时候如果遵守这样的规则,那联调的时候基本不需要太大的改动(balala乱扯),rpc适合服务器间通讯,以方法名来作为驱动(后面还说什么了记不住了)

    • nginx你会配么,怎么设置https
      会啊,首先要获取证书,然后在配置项里配置证书位置就好了,具体的配置项的key叫什么记不清了,我们项目目前都是http

    • http?那怎么保证网络安全?
      我们项目特殊,都是政府项目,访问都在内网,相对安全点···

    • http你了解么?和http2有什么区别
      它处于应用层(然后就是tcp/ip那一套握手挥手),http2快吧(其实应该答多路复用),支持长连接吧(其实应该说支持推送···)

    • 协议和计算机原理一直是lz的薄弱项,因为很少接触,不过最近准备开始系统学习了。。。

    • 剩下的就是项目的问题了,然后担任的角色,看哪些书,用哪些搜索引擎,看哪些国外网站(这个很尴尬,lz从来不记名字···,用手语比划回想起来还是很尴尬的,拿个笔我能给stackoverflow画出来)

    • 然后公司介绍了一下自己的情况,问我有什么问题,其实这是每个面试者都应该提前准备好的,当时一是没面试经验,二是没有面试准备,就随便聊了聊考勤问题、公司战略、架构师的经历(这个很尴尬,仿佛一副“你们凭什么降伏老子”的既视感···,其实我只是好奇架构师的成长之路),这一问题还是要去公司前提前准备好,针对于不同的公司有不同的问题。
      一些较为开放的问题一定要捋清思路,语言描述一定要有逻辑结构,毕竟程序员逻辑思维很重要。
      然后就让我等通知(好莱坞原则)

    总结

    这篇文章写给像我一样的面试小白,不要紧张,真实面对,也不要想蒙混过关,技术这东西编不出来的。唯有脚踏实地的去学习和思考,与君共勉。

    宝儿姐进化

    文章纯手打,如有不对或不准确请指出更正 谢谢!

    对齐填充。

    相关文章

      网友评论

          本文标题:2018-03-16 记一次面试----java

          本文链接:https://www.haomeiwen.com/subject/zfuuqftx.html