Java三顾之旅

来源:互联网 发布:天津日报大厦14楼 知乎 编辑:程序博客网 时间:2024/05/22 16:46

  • 目录
  • Java高级特性
    • 具体的专业问题
    • 项目经验
      • 项目详解
    • 课外积累
      • TCPIP协议或算法
  • 面试前的准备
    • 从零进阶
    • 第一阶段
    • 第二阶段
    • 第三阶段
    • 工作一年内
    • 工作1-2年间
    • 工作2-3年间
    • 工作3-4年间
    • 工作4-5年间
  • Java相关知识点
    • Java高级语言特点
    • Java程序的运行过程
    • Java三大版本
    • Java开发前的准备
    • Java程序开发
    • 总结
    • 快捷键
    • 第一个程序
  • SpringMybatis框架

目录

Java高级特性

具体的专业问题


Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap这一类的。

  • HashMap不是有序的
  • TreeMap和LinkedHashMap是有序的,如何保证它的顺序的?哪个的有序实现比较好?
  • 还有没有比它更好或者更高效的实现方式?
Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面的。

如果想实现所有的线程一起等待某个事件的发生,当某个事件发生时,所有线程一起开始往下执行的话,有什么好的办法吗?实现原理?

可以用栅栏(Java的并发包中的CyclicBarrier)。、

Java并发包当中的类,它们都有哪些作用,以及它们的实现原理,这些类就是java.concurrent包下面的。Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。

问题 2
IO包和NIO包中的内容。这部分里面NIO会是重点,IO包大部分都会比较熟悉。

NIO模型要熟悉,特别是其中的selector一定要非常清楚它的职责和实现原理。其实NIO的核心是IO线程池,一定要记住这个关键点。

有的时候,面试官可能也会问你IO包的设计模式(装饰器模式),为什么要这样设计?有的面试官还会问你有没有更好的设计,这个时候如果你不知道请果断说自己现在的水平有限,想不出来更好的设计。
面试时最好只表现你80%的能力,剩下的20%是留着到了公司以后给大家惊喜用的。

Java的虚拟机的内容。这部分主要包括三部分,GC、类加载机制,以及内存。
问题 3
双亲委派模型?
结合内存模型的设计谈谈volatile关键字的作用?
可见性引发的并发相关的内容?

项目经验


项目详解

一般的模式就是你自己去讲你做过的项目,然后面试官让你解释当时为什么要这么做,或者问你现在觉得有没有更好的办法。大部分与你的项目所用到的技术有关。
而你需要做的,就是充分、再充分的去总结自己做过的项目(尤其是最近的一两个项目),挖掘出一个甚至N个亮点,以备于到时候可以让面试官产生眼前一亮的感觉。
如果你能达到这种效果的话,基本上离你成功就不远了。

课外积累


TCP/IP协议或算法

  1、计算机系统原理。
  2、网络通信协议(TCP/IP,HTTP等)。
  3、数据结构与算法。
  4、著名开源项目的源码。
  5、你自己有很棒的开源项目。
  6、你的个人博客。
  7、待评论区补充。

面试前的准备

在面试前,通常只需要做一件事,而且LZ也一直都是这么做的。那就是在一个适合思考的时刻,去思考和总结自己所经历的过去以及所掌握的技术,要总结到精髓,并且挖掘出自己至少一个亮点。

一个人经历过一年,甚至更久的工作之后,总会经历大大小小的事情。每一次面试之前的总结,不光是为了面试,更是为了让你在跳槽之前认清自己,并且清楚自己所需要的提升到底在哪,这才是跳槽真正的意义所在。很多人跳槽都是盲目的,并且每次跳槽之后都感觉不是很满意。其实有一个很重要的原因,就是你没有在面试之前认真的总结自己,你不了解自己现在到底优势在哪,劣势在哪,你需要弥补哪方面的空缺。

可能有的小伙伴儿会说,“总结我的经历和技术倒是可以,但是我做的项目和我会的技术都很平庸,实在找不到亮点怎么办?”
既然你都知道了你没有亮点,也就是知道了你自己欠缺什么,那么下次跳槽就努力给自己制造亮点,弥补自己的欠缺就行了。例如,你可以找一个大数据的工作,这样你以后就多了一个大数据的技术标签,这算是你的亮点。或者你也可以找一个有高并发的项目去做,这样你以后就有了高并发项目的经历,这也算是你的亮点。

注意:面试的专业技术复习和拓宽是很有必要的,请务必不要刷网上晒出来的无用面试题

———2017-07-24上午 电科院———
语言的基础部分其实就是语法以及一些关键字的作用(清晰的了解其实现原理),像一些if/else、for循环这类基础的语法,以及一些new、class、public这类的基础关键字。
基础部分的重点,其实主要就是static、final、transient、volatile(重点就三个字,就是可见性。在并发当中,可见性到底是什么意思。那么,为了弄明白可见性什么意思,就需要你了解什么叫主存和工作内存。volatile并不保证同步)这一类的关键字,以及内部类、泛型这一类的高阶语法。

从零进阶

务必要在学好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习。

第一阶段

对Java有一个基本的了解了,你可以用Java语言写出一些简单的程序,并且你用的是最简单的编辑器,比如记事本。不要急于进入下一部分,留下几天好好写一些程序,尽可能熟悉这些基础内容。等你写上几天程序以后,你往往会比较迷茫,因为你写的东西似乎看起来毫无用处,比如实现一个简单的计算器,读取一个文件等。

第二阶段

主要包含三部分:Web开发相关的内容,包括HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识。
第一部分:HTML/CSS/JS(前端页面),这部分内容可以试着自己写一些页面,当然,可以尽你最大的努力让它变得最漂亮。这部分内容对于后端Java来说,理论上不是特别重要,但至少要达到可以自己写出一些简单页面的水平。
第二部分:Servlet/JSP(J2EE),这部分是Java后端开发必须非常精通的部分,因此这部分是这三部分中最需要花精力的,而且这个时候,要学会使用开发工具,而不能再使用记事本了,可以选择eclipse。
第三部分:需要学会使用数据库,mysql是个不错的入门选择,而且Java领域里主流的关系型数据库就是mysql。这部分一般在你学习Servlet/Jsp的时候,就会接触到的,其中JDBC部分就是数据库相关的部分。不仅要学会使用JDBC操作数据库,还要学会使用**数据库客户端工具,比如navicat(简单便捷。它是一款功能强大的MYSQL数据库管理工具,内置多个高级工具,可以导入外部数据,SQL调度器和报告工具向导会引导您通过若干步骤调度查询的执行,结果可以发送给多个接收者,您还可以使用该功能执行例如 ANALYZE, REPAIR等维护查询),sqlyog(简单便捷。它是一款功能强大的MYSQL数据库管理工具,内置多个高级工具,可以导入外部数据,SQL调度器和报告工具向导会引导您通过若干步骤调度查询的执行,结果可以发送给多个接收者,您还可以使用该功能执行例如 ANALYZE, REPAIR等维护查询。
)**,二选一即可。

第三阶段

公司里为了提高开发的效率,会使用一些Java Web框架,因此你还需要学习一些开发框架。
目前比较主流的是SSM框架,即spring、springmvc、mybatis。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目。你可以不理解那些配置都是什么含义,以及为什么要这么做,这些留着后面你去了解。
你在搭建SSM的过程中,可能会经常接触到一个叫maven的工具。这个工具也是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中,也可以顺便了解一下maven的知识。在你目前这个阶段,你只需要在网络上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。
关于学习SSM框架的地址给大家推荐一个,这里面有视频,大家可以去观看,地址是http://edu.51cto.com/lesson/id-76468.html。

工作一年内:

这个阶段是你成长极快的阶段,而且你可能会经常加班。
在这一年里,你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解,是Java基础的升级版。

工作1-2年间:

已经对Java有了一个更加深入的了解。但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次,很少会去考虑设计的问题。必须对于设计模式了如指掌,《大话设计模式》可以作为你的开端。不要有任何松懈的心理,否则五年后,你不要去羡慕别人高于你的工资,也不要去羡慕别人进入了某公司。
此外,设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书。比如《重构改善既有代码的设计》,《effective java》。

工作2-3年间:

这个阶段,有一本书是你必须看的,它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书,没有之一。Java是运行在JVM之上的。
《Java并发编程实战》这本书。并发的部分基本已经了解了十之六七。
需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并发包java.concurrent的内容),也就是JVM和JDK的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。
这个阶段,除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码,去造一个任何你能够想象出来的轮子。

工作3-4年间:

《深入理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。而《数据结构与算法》这本书,则比较适合做计算研究工作的人,比如刚才提到的分布式计算。理论上来讲,这一年你能把这三本其中一本精读下来,就已经非常厉害了。

工作4-5年间:

这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。当然,你也可以去Github创建一个属于你的开源项目,去打造自己的产品。

Java相关知识点

Java高级语言特点

Java、C++和C#都是面向对象,而C则是面向过程;能够实现面向对象思想(封装,继承,多态)。
Java程序的跨平台主要是指字节码文件可以在任何具有Java虚拟机的计算机或者电子设备上运行,Java虚拟机中的Java解释器负责将字节码文件解释成为特定的机器码进行运行。

Java程序的运行过程

分为两步:先编译再解释执行
通过“编译器”将Java源程序(.java)编译成Java 字节码文件(.class)(字节码文件采用结构中立的中间文件格式);
通过不同的“虚拟机”将Java字节码文件解释为对应机器语言并执行。
这里写图片描述
JDK(Java Development Kit),针对Java开发员的产品;
JRE(Java Runtime Environment),运行Java程序所必需的环境集合;
JVM(Java Virtual Machine),解释运行Java字节码文件,跨平台的核心。
联系:JDK 包含JRE,JRE包含JVM。

Java三大版本

Java的各类版本:Java EE、Java SE和Java ME,其中:
- 企业版本(Java2 Enterprise Edition)定义在服务器端Java2的企业版,主要用于分布式网络程序的开发,如电子商务网站;
- 标准版本 (Java2 Standard Edition) 定位在客户端,主要用于桌面应用软件的编程;
- 微型版本(Java2 Micro Edition) 主要应用于嵌入式系统开发,如手机和Pad等移动端的编程。
这里写图片描述

Java开发前的准备

终端中输入:java -version验证JDK是否安装成功;
开发工具:Sublime和Eclipse;
JDK帮助文档:是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料。

Java程序开发

关键字class表明Java 程序中的全部内容都包含在类中;
main方法是Java应用程序的入口,它有固定的书写格式:
public static void main(String[] args ) {…} ;
在Java中,用花括号划分程序的各个部分,任何方法的代码都必须以“{”开始,以“}”结束;
代码注释: // 单行注释 注释内容从//到本行结尾, /* / 多行或行内注释,注释不能嵌套,/* */文档注释 可以通过JDK提供的Javadoc命令,生成程序的API文档。

总结

理解println( )和print( )的区别
认识最简单的转义字符 \t \n
一个源文件可以有多个class
一个源文件中至多只能有一个public的类声明,其它类的个数不限,如果源文件中包含一个public 类,源文件名必须和它中定义的public的类名相同,且以“java”为扩展名。

快捷键

alt+/:快捷生成main方法;
syso :快捷生成输出语句。

第一个程序

编写源代码.java;
编译源代码,生成字节码.class;
解释执行,把字节码转换为机器可以识别的机器码。

class  HelloWorld{    public static void main(String[] args){        System.out.println("你好,世界!!!");    }}

定义一个类 class HelloWorld{}; 类中含有一个方法 public static void main(String[]args){}; 方法内含有输出语句 System.out.println(“你好世界”);
文件到达无法分析的结尾 缺少{};java语言严格区分大小写String和System 首字母大写;
java语言所有的标点符号都是英文半角;java每一行语句 ; 结束 ;
如果class被public修饰,则类名必须与源文件的名字保持一致;一个文件内最多只能有一个类声明为public ;如果一个文件内含有多个class , 那么编译后就会生成几个对应的.class文件 ;
转义字符\n;换行\t;一个制表符就是 一个tab键的距离;
类名、方法名和变量名命名要求:不能以数字开头或java中的关键字;其中类名必须首字母大写,其中变量名和方法名采取驼峰式命名,单个单词:year;多个单词:verdureHuiHello。

Spring、Mybatis框架

  框架这部分其实不用多说了,spring和mybatis框架的原理和源码,如果你可以非常精通的话,那么这一定能成为你巨大的优势。

  如果你是专门做WEB开发的Java后端猿,那么spring和mybatis框架基本上你是肯定要用的。精通Spring和mybatis框架不仅为了面试,对于你日常开发也有巨大的帮助,你可以做很多架构上的优化,为你的战友省去很多重复性的工作。

  关于Spring框架,最核心的当然是IOC,其次便是AOP、MVC这两部分了。好好研究这三部分的源码,会让你从大部分程序员当中,脱颖而出。至于mybatis框架,主要还是关注它如何实现动态SQL。
  
更多内容,不断更新中。。。。。。。

原创粉丝点击