JavaWeb面试总结

来源:互联网 发布:spss数据分析实例报告 编辑:程序博客网 时间:2024/05/21 10:37

根本搞不懂当初怎么走上程序员这条路了。

很久和哥哥做过交流,关于“面向对象”的理解。去中软ETC面试的时候也问过面向对象的问题,只不过当时并不能做很好的解答就甩锅给面试官。不过随着时间的推移,再去回顾当年被问的经历,我想去做更好的解答。

学如逆水行舟,不进则退。

要走的路还有很长,前一段时间和军哥(室友)讨论技术,以至于惊讶自己的进步。但天外有天。

可能是因为最近面试的关系,全方面的了解技术范畴。晚上回来整理当天的面试笔记,然后再总结。以及用更好的语言去描述。

我面试的是Java,所以最近的面试主要是这几个方向。

JavaJavaScriptSQL 和 NoSQL设计模式。 主要是单例模式事务 以及 分布式事务Dubbo 和 zookeeperSpringMVC 和 MVCMyBatis 和 SpringJDBC面向对象特性以及JDK新特性SQL优化、JVM优化 和 JS优化

由于个人偏Java后台,所以面试盘问的范围还不算大,需要掌握的细节比较多。

接下来要整理笔记,总结。可能以后再做跳槽面试的时候还能温故而知新。

关于Java,最近问的比较多的就是collection,IO,多线程。    collection主要是问到List,Set,Map之间的区别,相关底层实现原理。    IO主要是应用在生态环境中针对用户上传的文件做相关处理以及用到的相关流,还有网络传输的字符流以及字节流之间的转换。还有业务牵扯到的POI操作office文档的实现。    多线程会关心到线程共享数据如何做线程安全。实现多线程的几种方式,目前了解到有3种实现方式        实现Runnable接口        集成Thread        实现Callable接口    NIO BIO 相关阻塞队列 StringBuffer和StringBuilder的区别等等JavaScript    常用的定位选择器    其它的不知道了,就一两家问到这个问题了。关于SQL    SQL语句 笔试    SQL优化 (后面会说)    垂直分库 水平分库    mysql-proxy中间件 Alibaba又出了MyCat    主从复制 读写分离    索引的原理    事务的控制    存储过程关于NoSql,用过Redis    Redis的持久化    有哪些类型(String,list,hash,set,zset)    Redis在业务的需求(DB缓存,Session共享)    关于DB缓存引发的问题可能会有以下三种        缓存穿透        缓存并发        缓存失效    秒杀商品的实现    消息推送(push/sub)    主从复制设计模式    单例模式有N多种写法,并不是单单的懒汉式饿汉式,另外还有注册登记式,双重检验锁。还有很多。在GitBook找设计模式Java。    常用的设计模式,量力而为。比如抽象工厂,生产消费,观察者等等...事务    这个面试是最头痛的问题,也是最常问的问题,这里理解有事务控制就很难做高并发处理。所以要了解到事务的底层,在youtube上看到的关于事务的视频,了解到事务序列化,事务并发,以及后来的事务MVCC。进而牵扯到事务的特性,事务的隔离级别。    然后就是相关的死锁检测以及针对死锁的解决方案。关于分布式事务    说白了就是以前的单机事务变成了现在的跨库事务(分布式事务)    这个需要从分布式说起,否则很难理解分布式事务的应用场景。    关于分布式需要知道的是CAP定理(Consistence一致性)(Acailability可用性)(Network partitioning分区容错性),根据CAP定理分布式系统只能满足三项中的两项而不可能满足全部三项。    进而要了解的问题就是如何保证CAP定理中的“C”一致性,进而牵扯到的分布式事务。Dubbo 和 zookeeper    Dubbo是Alibaba开源的分布式框架,需要理解的是dubbo.io官网上提供的Dubbo运行框架图,并思考它的应用场景。和以前的开发架构(垂直架构)的优点,最近推出除了阿里巴巴的Dubbo外还有Google的Grpc,百度的Brpc。去京东面试的时候发现京东也有自己的分布式框架JSF,不过没有开源。    关于zookeeper,安装在Linux环境中,是Dubbo的依底层赖。需要掌握相关的常用命令关于SpringMVC    原理实现,流程。    MVC的分层架构。关于Spring整合框架    IOC控制反转 无反射不框架 通常要介绍关于Spring容器的依赖注入方式,以及相关的配置。    AOP面向切面编程 底层 动态代理,实现日志事务通知方式 以及通知的5种方式。    问反射,讲面向对象的“六原则一法则”关于ORM持久层框架    hibernate mybatis SpringJDBC    比较关心的是mybatis        关于SQL防止注入        mybatis的#和$的区别以及作用。        mybatis的二级缓存面向对象特性     面向对象特性的范围很大,只能挑重点说了。说多了容易自己挖坑自己跳进去。    封装、继承、多态。比如在业务做条件查询,会通常做一些BaseCondition封装,再一个就是工具类的封装,时间、UUID生成器等等。重载就是方法的再封装。继承会说些重写的子类复写父类方法重写。封装、继承都是为多态服务的,Java核心思想有说。父类引用指向子类对象。JDK新特性    问过JDK8 和 JDK7的新特性。    还有最近发布的Java9,可以讲下Jshell编程。很加分。SQL优化    这是出家必备    首先要知道为什么要做优化,思路是DB出现瓶颈后才会做相关的解决方案==》优化        首先是分两个方向 一个是硬件方向  另外一个是软件方向        硬件方面是 就是一些性能的东西 决定性因素在于 网卡IO吞吐量. 比如硬盘 比如现在就有一些用SSD做缓存,用HDD做数据仓库 然后就是内存的数据交换速度 再往上就是CPU的执行速度.        所以一般在这里的优势是在一定的性能情况,如何把SQL执行效率进行最大化        然后在目前呢,就是索引的问题,如何充分利用数据库索引.保证查询效率的性能,主要呢就是避免存储引擎放弃使用索引而进行全表扫描        这样的话会引起查询效率问题.也可能会触发表级锁,行级锁.        然后就是注意的情况就是避免索引字段设置 为空字段 聚合函数 计算操作 not <> !=  数据类型转换   查询模糊匹配 比如like 字符串%        然后就是在写操作的 比如经常嵌套多级子查询的 适当的拆成几步 先生成一些临时表  再进行关联操作        还有就是union all的语句 用union        where 要尽量避免对索引字段进行计算        就是说 避免使用 in, not in, or 或者having  比如可以用exist 和 not exist 来代替in 和in not in        可以使用表连接代替exist having用where代替  如果无法代替就分成两步处理        不要以字符串声明数字,要以数字格式声明字符值  否则会使索引无效 产生全表扫描        关于排序 避免使用耗费资源的操作  带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序        再深入一些就是关于表设计方面,一个好的表设计会提高表的性能.也利于后期表的扩展 比如一些字段的配置,分库分表 业务相关的字段频率较多的进行优化JVM优化    需要看相关的书籍,比如《深入理解JVM》    面试的时候只能讲一些皮毛,就是关注各代对象类型的内存分配,比如新生代到年轻代再到老年代,它们之间的关系。还有永生代。(不要理解成vampire...)    还有就是GC,我个人认为是JVM的重点(欢迎各位大神补充),就是开发过程中要养成的习惯是适应GC去开发,比如要释放对象,要把该对象引用赋值为null,配合GC处理。尽量避免触发Full GC。JS优化    和Java代码优化思路相同,就是尽量用局部变量,避免For深度循环,浏览器加载JavaScript是需要时间的。优化循环    在JavaScript中函数也是对象,可以做函数运算结果缓存。    https://segmentfault.com/a/1190000000490324

就这些吧,经验是一点一点积累的。

无惧无畏,勇往直前。

原创粉丝点击