`

林萧谈如何进入BAT

 
阅读更多
前提:

1. 心态

心态上要静下心来看书,一点一点扣,切忌浮躁。

2. 欲望

欲望是前进的动力。

一。基本要求:必须会的,必考的

1. 语言基础

基础部分的重点:

1)关键字:statis, final, transient, volatile。

2)高阶语法:内部类、泛型。

具体解释:

1)static: static变量不会被GC回收,也就意味着有内存泄露的风险。— 融云的项目还会造成频繁的Full GC.

static会将所引用的属性、方法、内部类,与类直接产生引用关系,而不是与类的实例。为什么一个没有被static修饰的内部类,必须要这么声明:
OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();
这是因为,没有用static修饰内部类InnerClass,所以必须new一个外部类OuterClass的实例,才能在此基础上new出新的内部类的实例。如果使用了static修饰内部类,那么就不用new OuterClass()了,而仅需要这样:
OuterClass.InnerClass innerClass = new OuterClass.InnerClass();

2) volatile:  可见性(主存和工作内存)、不能保证同步
其他待续。。。

2. Java运行时环境 — 其实就是考JVM

JVM与Hotspot的关系:JVM是规范,Hotspot是对规范的实现。

JVM三个部分必须非常清楚:内存划分、class加载机制、GC策略。

1)内存划分

我们常说的对于内存的划分,通常是指Hotspot的划分方式,而非JVM规范所规定的。
Hotspot将JVM内存划分为三个部分,Young Generation(年轻代)、Old Generation(年老代)、Perm Generation(永久代)。其中,Young Generation又分为Eden、From和To. 其中From和To又统称为Survivor Spaces(幸存区)。

对于内存的划分,可以没事用内存分析工具看看,如jmap, jvisualvm等等,观察下各个区域实际的变化。

2)classloader机制

关于classloader,可以结合tomcat,了解清楚tomcat和classloader机制,看看tomcat是如何保证各个APP之间的类的隔离的。
待续。。。

3)GC
http://www.cnblogs.com/zuoxiaolong/category/508918.html
待续。。。

3. 并发知识与Concurrent包

精通并发知识是进入一线互联网必备知识。

并发知识,有两个重要概念:可见性、原子性。
可见性与volatile息息相关。

之后就是Concurrent包了,这是一个宝藏,对于写并发程序非常有用。

1)ConcurrentHashMap与HashMap的区别,即ConcurrentHashMap的分段锁最常考。而且要理解二者的底层实现原理。

2)Concurrent包中非常重要的类: AbstractQueuedSynchronizer. 几乎所有的concurrent包中的并发工具类,都继承自它。

3)ReentrantLock和synchronized关键字的区别:synchornized是由JVM底层实现的互斥,因此效率会高些。而ReentrantLock功能比synchronized更多,比如定时获取某个锁,多个等待条件等。

并发部分是程序员进阶的关键部分。

4. 设计模式和反射

这部分是高阶程序员必须精通的部分。用好了这部分知识,可在实际开发中少写N多代码,而且程序的结构更好。

http://www.cnblogs.com/zuoxiaolong/category/509144.html。

关于发射,其实就是reflect包里的内容,Spring框架最常用,里面充斥着大量的设计模式和反射的真实使用场景,没事多研究下,会受益匪浅。

5. 文件IO、NIO、网络IO及网络协议

NIO关键是了解其原理,此外,要了解BIO、NIO、APR三者的区别。

网络IO部分,就是net包中的内容,如调用HTTP-API, 那么就需要使用里面的类,在restful-API泛滥的时代,少不了要使用HTTP协议调用API.
因此,在了解这部分的时候,网络协议也要适当的了解下,最典型的是TCP和HTTP协议,必须了解他们。比如TCP协议的重试机制,三次握手的过程。
至于HTTP协议,相对来说就简单很多了,应用层的协议主要是知道其协议格式即可,比如都支持哪些header、每个header都是什么含义等等。

上述内容,就是所谓的扎实的Java基础。

二。可选要求:这部分是决定公司要不要你的最关键指标

Spring、Mybatis框架

spring和mybatis的原理和源码,如果你非常精通的话,那么会成为你的巨大优势。这部分知识可以做很多架构上的优化,且可省去很多重复性的工作。

关于Spring框架,最核心的是IOC, 其实是AOP和MVC这两部分。要好好研究这三部分的源码。

关于Mybatis框架,主要关注它如何实现动态SQL.

研究透彻之后,你完全可以自己尝试去造轮子,会有意想不到的收获。

2. Linux服务器

对于java后端开发,如果精通Linux服务器,对于排查线上问题有很大的帮助。

一是要熟悉Linux的常用命令,二是最好了解Linux操作系统本身,包括文件系统、网络、IO等等。

3. 数据库优化

一个应用系统的性能瓶颈,通常在于DB, 所以要明白DB的优化

在SQL过慢时,如何通过索引、SQL分析和优化,将SQL的执行时间优化到一个可接收的范围内,这个过程如果精通,足以成为优势。

4. 消息服务

消息服务是当今互联网公司中必不可缺的一个组件。

常见的组件比如rabbitMQ, activeMQ等等,如果精通其原理的话,也会成为有力的竞争条件。

消息服务的重点,无非就是如何保证最终一致性、消息的有序、包括消息的事务等。

5. 缓存服务

常用的缓存有redis, memcached。 如果可以搞清其中一个,会为你加分不少。

对于缓存服务,常见的问题有,缓存满了怎么扩容,缓存的实时性如何处理,内存结构如何规划,分布式场景下如何处理增删节点时缓存的命中问题等等。

6. 负载均衡器

常见的负载均衡器就两种,一种是软负载均衡,如nginx, apache, lvs等;另一种是硬件负载均衡 ,如F5.

硬件负载均衡,主要用于简单的应用、并发量大的场景。
软件负载均衡,主要用户复杂的应用,并发量小的场景。
还有,硬件负载均衡一般非常贵,而软件负载均衡基本没有成本。

负载均衡器常见的问题有,如何保持会话、如何做流量控制、负载均衡算法有哪几种,如何坚持后端服务器的健康状态等等。

7. 总结:对于上述的6点,光知道答案并不足以体现优势,要有独到的见解及深刻的理解。

三。加分要求

所谓加分要求,其实也是基本要求,即是拿到Offer的关键。

1. 数据结构与算法

这块既是加分项,也是必须的项。必须要熟悉各种排序、各种常用算法,比如贪心、递归等等。

2. 计算机操作系统

这块是一些最基本的底层原理,如内存、指令、系统IO等等。
http://www.cnblogs.com/zuoxiaolong/category/518480.html

3. 计算机网络

要理解透彻TCP/IP协议,计算机网络知识必不可少。

4. 熟练使用一种脚本语言

脚本语言很多时候是很方便的,而且非常实用。虽然Java也可以实现类似的功能,但如果你可以熟练使用一种脚本语言,如Python或者shell,必定会成为你的加分项。

5. 你的github和博客

如果拥有自己的github和博客,而且里面有不少有价值的内容,会为你加分不少。

四。总结

大部分一线互联网,对于招人的技术要求就两个:扎实的Java基础和一个一技之长。





分享到:
评论

相关推荐

    我来告诉你,草根程序员如何进入BAT1

    引言首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字。写这篇文章的目的其实很简单,算是对之前LZ一篇文章的补充和完善。之前LZ写过一篇《回答阿

    记_林萧.pdf

    这篇文本主要围绕着《小时代》系列小说中的角色林萧展开,通过书中的情节和人物关系,分析了林萧的性格特点以及与其他角色的互动,从中我们可以提炼出以下知识点: 1. **人物塑造**:林萧、顾里、南湘、唐宛如是...

    活泼单页12.docx

    林萧的个人简历就是一个极佳的示例,它详细地展示了他如何在教育背景、专业技能、工作经验和荣誉等方面塑造了一个全面而多元化的市场营销专业人士形象。 林萧毕业于广州科技大学,获得了市场营销专业学位,这为他的...

    2015年高中语文优秀作文既然青梅竹马何必相濡以沫?素材

    3. **个人选择与人生规划**:夏悦在高中时期选择了退学,进入职场,而林萧则选择了外出工作。他们的选择反映了个人对未来的规划和追求,也体现了对教育价值的不同理解。 4. **情感表达与沟通**:林萧多次向夏悦表白...

    数学教师述职报告.docx

    例如,报告中提到的《浅谈中学数学习题变式的教学》和《高考中数列内容变更引发的思索》,体现了教师对教学方法的研究和探索。 3. **新课程标准实施**:数学教师应适应新的课程标准,调整教学策略,确保教学内容的...

    基于Linux嵌入式系统开发平台的构建及应用.pdf

    文章作者是林继民、吴怡和林萧,来自福建师范大学物理与光电子信息科技学院。文章的核心内容包括ARM处理器与Linux操作系统的特点、嵌入式Linux系统的移植、开发环境的建立、调试方法以及应用实例。 1. ARM处理器与...

    uboot 详细解刨

    总结起来,U-Boot的启动过程是通过Stage1和Stage2的紧密配合,逐步完成硬件初始化,建立运行环境,最终进入用户交互模式。这个过程既包含了底层硬件的精细控制,也包含了对系统资源的高效管理,充分体现了Bootloader...

    Linux下的Cgic-Web标准库开发指导

    【Linux下的Cgic-Web标准库开发指导】 在Linux环境中进行Web开发,特别是对于嵌入式设备,Cgic库是一个重要的工具。Cgic(CGI in C)是一个用标准C语言编写的库,专门用于简化CGI(公共网关接口)程序的开发。...

    C#简单学生宿舍管理系统实习

    【C#简单学生宿舍管理系统实习】是一个针对初学者或实习生设计的项目,旨在帮助他们理解和实践C#编程语言在实际应用中的使用,特别是在构建管理信息系统方面。在这个项目中,我们将探讨以下几个关键知识点: ...

    protoc-23.4-win64.zip

    标题中的"protoc-23.4-win64.zip"指的是Protocol Buffers(简称protobuf)的编译器protoc的Windows 64位版本,版本号为23.4。protobuf是由Google开发的一种数据序列化协议,它允许开发者定义数据结构,并将其转换为...

    基于Spark的数据处理分析系统的设计与实现

    基于Spark的数据处理分析系统的设计与实现随着计算机和信息技术的迅猛发展和普及应用,行业应用系统的规模迅速扩大,行业应用所产生的数据呈爆炸性增长。寻求有效的大数据处理技术、方法和手段已经成为现实世界...

Global site tag (gtag.js) - Google Analytics