ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java工程师基础知识点归纳

2021-07-30 12:00:54  阅读:134  来源: 互联网

标签:知识点 java 归纳 接口 线程 内存 Java 抽象类


1.接口和抽象类的区别

(1)抽象类里可以有构造方法,而接口内不能有构造方法。

(2)抽象类中可以有普通成员变量,而接口中不能有普通成员变量。

(3)抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。

(4)抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只有public和默认类型。

(5)抽象类中可以包含静态方法,接口内不能包含静态方法。

(6)抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。

(7)一个类可以实现多个接口,但只能继承一个抽象类。

(8)接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用。

2.Java虚拟机的运行时数据区有几块?线程私有和线程共享区域有哪些?

(1)程序计数器:线程私有,当前县城执行的字节码的行号指示器。

(2)虚拟机栈:线程私有,存放基本数据类型、对象引用和returnAddress类型。

(3)本地方法栈:为虚拟机使用到的Native方法服务。

(4)Java堆:线程共享,存放对象的实例,也是GC回收器管理的主要区域。

(5)方法区:线程共享,存放已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。

(6)运行时常量池:方法区的一部分,存放编译期生成的各种字面量和符号引用。

(7)直接内存:不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,容易引起OOM异常,NIO会调用,不受Java堆大小的限制。

3.HashMap和HashTable区别?

(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

(2)Hashtable的方法是同步的,而HashMap的方法不是,因此HashTable是线程安全的,但是代码的执行效率上要慢于HashMap。

(3)HashMap允许空值和空键,但是HashTable不可以。

(4)HashMap非同步实现Map接口,是一个“链表数组”的数据结构,最大承载量是16,可以自动变长,由Entry[]控制(key,value,next),hashCode()判断key是否重复。

(5)建议需要做同步,使用ConcurrentHashMap,降低了锁的粒度。在hashMap的基础上,ConcurrentHashMap将数据分为多个segment,默认16个(concurrency level),然后每次操作对一个segment加锁,避免多线程锁得几率,提高并发效率。这里在并发读取时,除了key对应的value为null之外,并没有使用锁。

4.ArrayList和LinkedList区别?

ArrayList基于数组实现,LinkedList基于链表实现,ArrayList增加和删除比LinkedList慢,但是LinkedList在查找的时需要递归查找,效率比ArrayList慢。关于多线程方面,如果要求线程安全的,有一个Vector,不过比较多的使用的是CopyOnWriteArrayList替代ArrayList,CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。发生修改时候做copy,新老版本分离,保证读的高性能,适用于以读为主的情况。

5.面向对象和面向过程的区别:

面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

6.Java内存模型

(1)Java内存模型分为主内存和工作内存两个部分,其中主内存存放变量,工作内存由每个线程创建和管理,保存被该线程使用到的变量的主内存的副本拷贝。变量从主内存复制到工作内存,顺序执行read和load操作,变量从工作内存同步到主内存的时候,顺序执行store和write操作。

对于volatile变量在各个线程的一致性:在各个线程的工作内存中,volatile存在不一致的情况,但在每次使用前都会刷新,执行引擎看不到不一致的情况,因此可以认为不存在一致性问题。

(2)原子性、可见性和有序性

(3)先行发生原则

7.Java垃圾回收机制

Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

System.gc();

Runtime.getRuntime().gc();

上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。

8.类加载器,类加载时机

类初始化的时机,有且仅有四个:

A、遇到new、getstatic、putstatic、invokestatic这四条字节码指令的时候。

B、使用java.lang.reflect进行反射调用的时候。

C、当初始化一个类的时候,发现其父类还没有初始化,那么先去初始化它的父类。

D、当虚拟机启动的时候,需要初始化main函数所在的类。

9.Java基本数据类型

boolean(1)、byte(8)、char(16)、short(16)、int(32)、float(32)、long(64)、double(64)

10.Java内存模型

特点:原子性、可见性、有序性。

A、原子性:read、load、use、store、write,synchronized关键字保证原子性

B、可见性:synchronized、volatile、final保证可见性

C、有序性:synchronized保证有序性

11.J2EE的13种规范

(1)JDBC(java Database Connectivity):

JDBC API为访问不同的数据库提供了一种统一的途径,就像ODBC一样,JDBC对开发者屏蔽了一些细节问题,同时,JDBC对数据库的访问也具有平台无关性。

(2)JNDI(Java Name and Directory Interface):

JNDI API 被用于执行名字和目录服务。它提供了一致的模型用来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。

(3)EJB(Enterprise JavaBean):

J2ee技术之所以赢得全体广泛重视的原因之一就是EJB,他们提供了一个框架开发和实施分布式商务逻辑,由此很显著简化了具有可伸缩性和高度复杂的企业级应用开发。EJB规范定义了EJB组件何时如何与他们的容器继续拧交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但是注意的是,EJB并不是J2EE的唯一途径。正是由于EJB的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。

(4)RMI(RemoteMethod Invoke):remote(遥远的) invoke(调用):

正如其名字所表示的那样,RMI协议调用远程对象上方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。

(5)Java IDL(接口定义语言)/CORBA:公共对象请求代理结构(Common Object Request Breaker Architecture):

在java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可以在CORBA ORB中展开,或者他们还可以创建Java类并做为和其他ORB一起展开的CORBA对象客户。后一种方法提供了另外一种途径,通过它可以被用于你的新的应用和旧系统相集成。

(6)JSP(Java Server Pages):

Jsp页面由html代码和嵌入其中的Java新代码所组成。服务器在页面被客户端所请求以后对这些java代码进行处理,然后将生成的html页面返回给客户端的浏览器。

(7)Java Servlet:

servlet是一种小型的java程序,它扩展了web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多和jsp类似,不过实现方式不同。JSP通过大多数的html代码中嵌入少量的java代码,而servlet全部由java写成并生成相应的html。

(8)XML(Extensible Markup Language):

XML是一种可以用来定义其他标记语言的语言。它被用来在不同的商务过程中共享数据。XML的发展和Java是互相独立的,但是,它和java具有相同目标正是平台独立。通过java和xml的组合,我们可以得到一个完美的具有平台独立性的解决方案。

(9)JMS(Java Message Service):

Ms是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,有支持发布/订阅类型的域,并且提供对下列类型的支持:经认可的消息传递,事务性消息传递,一致性消息和具有持久性的订阅者的支持。JMS还提供了另一种方式对您的应用与旧的后台系统相集成。

(10)JTA(Java Transaction Architecture):

JTA定义了一种标准API,应用系统由此可以访问各种事务监控。

(11)JTS(Java Transaction Service):

JTS是CORBA OTS事务监控的基本实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API(JTA)规范,并且在较底层实现OMG OTS specification 的java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。

(12)JavaMail:

JavaMail是用于存取邮件服务的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。

(13)JAF(JavaBeans Activation Framework):

JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。

12.try/catch/finally/return 作用顺序

不管有木有出现异常,finally块中代码都会执行;

当try和catch中有return时,finally仍然会执行;

finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;

finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

标签:知识点,java,归纳,接口,线程,内存,Java,抽象类
来源: https://www.cnblogs.com/cqqfboy/p/15078985.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有