Java研发工程师·知识汇总

来源:互联网 发布:tts软件ios 编辑:程序博客网 时间:2024/06/05 06:56

Java研发工程师岗位,关于Java的知识主要有三部分。一是Java语言的知识,如果能读透《Java编程思想》就ok了;二是Java Web开发的知识,主要是SSH框架;三是Java虚拟机的知识,推荐《深入理解Java虚拟机》这本书。除此之外,Java研发工程师还需掌握操作系统、数据库、计算机网络的知识。


1.面向对象的三个基本特征:封装、继承、多态。


2.进程和线程的区别:

①进程是系统资源分配的基本单位,线程是独立运行和调度的基本单位;

进程是一个“执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程;

一个进程中可以包含若干个线程,它们共享进程所拥有的资源。


3.Java多线程

在Java中实现多线程的两种方式,一是继承Thread类,二是实现Runable接口。

如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

实现Runnable接口比继承Thread类所具有的优势:

①适合多个相同的程序代码的线程去处理同一个资源;

②可以避免java中的单继承的限制;

③增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。


4.TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。

从协议分层模型方面来讲,TCP/IP由四个层次组成:链路层,网络层,传输层,应用层。

而OSI参考模型分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层和应用层。


5.Java同步和锁

关于锁(lock)的文章,可以参考http://www.cnblogs.com/dolphin0520/p/3923167.html

Lock和synchronized有以下几点不同:

①Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;

②synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock时需要在finally块中释放锁;

③Lock可以让等待锁的线程响应中断,而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断;

④通过Lock可以知道有没有成功获取锁,而synchronized却无法办到;

⑤Lock可以提高多个线程进行读操作的效率。


6.Java关键字final

Java语言的关键字final用于变量、类或方法时,含义各不相同。

变量:一旦初始化,变量值就不能修改。

方法:该方法不能被子类重写(override)。

类:该类不能派生子类。


7.JSP的四个作用域:page, request, session, application.

①page指向当前页面,在一个jsp页面里有效。page里的变量只要页面跳转就不见了。

②request 指从http请求到服务器处理结束,返回响应的整个过程。在这个过程中使用forward方式跳转多个jsp。在这些页面里你都可以使用这个变量。 request里的变量可以跨越forward前后的两页。但是只要刷新页面,它们就重新计算了。 

③Session 有效范围当前会话,从浏览器打开到浏览器关闭这个过程。

④application它的有效范围是整个应用。 作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用,application里的变量一直在累加,除非你重启tomcat,否则它会一直变大。


8.操作系统中的堆栈

堆栈空间分配
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

堆栈缓存方式
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。


9.Java String

①String对象是不可变的。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容。

②equals()和==

equals():在object中,是用来比较内存地址的,但是在String里是比较内容的,即使是不同地址,只要内容一致,返回true;

==:在哪里都是比较地址。

关于String的==:

String a1 = "abc";
String a2 = "abc";
String a3 = new String("abc");
String a4 = "a"+"bc";

a1==a2  true

a1==a3  false

a1==a4  true

分析:因为String太过常用,JAVA类库的设计者在实现时做了个小小的变化,即采用了享元模式,每当生成一个新内容的字符串时,他们都被添加到一 个共享池中,当第二次再次生成同样内容的字符串实例时,就共享此对象,而不是创建一个新对象,这样的做法仅仅适合于通过=符号进行的初始化。

Java中,“==”运算符用来比较两个引用以查看它们是否指向同一个内存对象。而对于String实例,运行时状态会尽可能地确保任意两个具有相同字符信息的String字面值指向同一个内部对象。此过程称为驻留(interning)。


10.i++与++i

i++是执行完后面的语句才+1,而++i是先+1再执行后面的语句。






0 0
原创粉丝点击