Java面试题基本知识点总结(2)

1.数据库删除数据的三种方法,TRUNCATE,DELETE,DROP放在一起比较:

a) TRUNCATE TABLE:删除内容、释放空间但不删除定义。

b) DELETE TABLE:删除内容不删除定义,不释放空间。

c) DROP TABLE:删除内容和定义,释放空间。

d) delete from 'tableName:DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。(相当于把房子里家具全丢了,但为了纪念原先的家具,所以原先放家具的那块地以后不再放新家具了)

e) drop TABLE 'tableName:删除表定义及其数据(相当于除了把家具丢了外,还把房子拆了,回到解放前)

f) truncate TABLE 'tableName':TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。(相当于把家具丢了,也不纪念什么了,以后有新家具了,直接重新摆放) 主键id递增,你如果想让它重新从1开始递增,怎么办呢? 就用 truncate table "tabeName"删除它吧

2.Unix系统中可以进行进程通信的有:管道、信号、信号量、消息队列、共享内存、套接字。

3.Windows系统中进程同步通讯的是互斥量、信号量、事件。线程同步的是:互斥量、信号量、事件、临界区。

4.在switchexpr1)中,expr1只能是一个整数表达式或者枚举常量。Jdk1.7之后支持String类型作为表达式。

5.Java运算中低类型会自动转为高类型。如Intdouble运算时,int自动转为double

6.接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。

7.RuntimeExceptionNullPointerExceptionArrayIndexOutOfBoundsExceptionClassCastExceptionNegativeArrayExceptionFileNotFoundException

8.Collection 
├List 
│├LinkedList 
│├ArrayList 
│└Vector 
│ └Stack 
└Set 
Map 
├Hashtable 
├HashMap 
└WeakHashMap 

ArrayListVector都有一个初始的容量,当存储进它们里的元素的个数超过了容量时,就需要增加ArrayListVector的存储空间,Vector增长原来的一倍,ArrayList增加原来的0.5倍。

ArrayListVector都是使用数组方式存储数据。

Vector线程安全,ArrayListLinkedList是线程不安全的。LinkedList可以被当作堆栈和队列来使用。

9.Set里的元素是不能重复的,元素重复与否是使用equals()方法进行判断的。

10.Hashset中已经存的值,不能修改其参与计算哈希值的字段,否则会内存泄露。

11.回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

12.java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露.

13.非访问修饰符:abstractfinalstrictfp

14.局部变量前不能放置任何访问修饰符 (privatepublic,和protected)

15.Final修饰的时候,基本变量不能变,引用不能变。注意:引用对象的内容可以被修改。

16.Final修饰的变量,没有默认值。

17.方法中的局部变量使用final修饰后,放在堆中,而不是栈中。

18.在group by之后不能使用where,只能使用having,在group by之前可以使用where,即表示对过滤后的结果分组

19.数据库的四范式:

a) 一、每个属性是原子不可分的。

b) 二、所有属性依赖的主键。

c) 三、属性之间不能有依赖。

d) 四、属性内不能使多值属性。

20.数据库优化

a) 用PreparedStatement一般来说比Statement性能高。代码的可读性和可维护性好,也更安全,防止sql注入。

b) 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。

c) Select * form e where e.name = (select name from c where c.id = 1)的效率高于Select e.* form e,c where e.name =c.name and c.id=1。复杂度:第M*N,M+N

d) 索引:普通索引、主键索引、唯一索引。二叉索引和哈希索引使用的数据结构分别是:B+树和哈希表

21.UNION在进行表链接后会筛选掉重复的记录,而UNION ALL只是简单的将两个结果合并后就返回。效率上说,UNION ALL要比UNION快很多。

22.分页语句:mysql方案:select * from t order by id limit 30,10。效率最高。

23.Synchronizedlocked区别

a) Synchronized:在方法上进行同步public synchronized void test() {},在代码块上进行同步public void test() { synchronized(obj) { doSomething(); } }

i. 使用synchronized 代码块相比方法有两点优势:

1. 可以只对需要同步的使用

2. 与wait()/notify()/notifyAll()一起使用时,比较方便

a) 这三个方法都是Object的方法,并不是线程的方法

b) wait()notify()必须在synchronized代码块中调用。

c) notify(): 该方法会唤醒因为调用对象的wait()而等待的线程,其实就是对对象锁的唤醒,从而使得wait()的线程可以有机会获取对象锁。

ii. wait()sleep()最大的不同在于wait()会释放对象锁,而sleep()不会!

b) ReentrantLock synchronized有相同的并发性和内存语义,还包含了中断锁等候和定时锁等候,意味着如果线程A先获得对象obj的锁,则线程B在等待指定时间内依然无法获取锁,那么就会自动放弃该锁。

i. 但是由于synchronized是在JVM层面实现的,因此系统可以监控锁的释放与否,而ReentrantLock使用代码实现的,系统无法自动释放锁,需要在代码中finally子句中显式释放锁lock.unlock();

24.HashtableHashMap

a) Hashtable继承自Dictionary类,实现了Map接口。而HashMap是继承自AbstractMap,实现了Map接口。

b) 遍历的时候,HashTable使用EnumerationHashMap使用Iterator

c) HashTable的方法是同步的,HashMap未经同步。Collections.synchronizedMap(hashmap)来构造一个线程安全的map,与Hashtable几乎一样

d) HashTable不允许nullkeyvalue都不可以,HashMap允许null值,keyvalue都可以。

e) HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。

f) 哈希值的使用不同,HashTable直接使用对象的hashCode

25.Java是否有内存泄露和内存溢出:两种都存在

a) 内存泄漏有两种情况

i. 在堆中的分配的内存,在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(c/c++会发生这种情况)

ii. 在内存对象明明已经不需要的时候,还仍然保留着这块内存和它的访问方式(引用)。

b) Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度。(对象游离)(比如:在局部使用的变量就不要声明为实例变量)

c) 内存溢出见29

26.ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability.

a) 原子性意味着数据库中的事务执行是作为原子。即不可再分,整个语句要么执行,要么不执行。

b) 一致性,即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。

i. 数据库机制层面

ii. 业务层面.

c) 隔离性。事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。

i. 脏读:意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的.

ii. 不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。

iii. 幻读,是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.

iv. 隔离级别:

1. Read Uncommited(最高的性能,但可能出现脏读,不可重复读,幻读)

2. Read commited(可能出现不可重复读,幻读)

3. Repeatable Read(可能出现幻读)

4. Serializable(最低的性能,Range锁会导致并发下降)

d) 持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

27.数据库索引

a) 索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。

28.父类引用子类方法调用问题

a) 当父类引用f指向其子类的对象的时候,通过f无法访问专属于子类对象的成员。

i. 因为fFatherClass,所以编译器只知道f拥有FatherClass.class的信息,FatherClass.class以外的信息,编译器不知道,而子类的对象成员是在SonClass.class里,也就是说在FatherClass.class以外,所以f无法访问子类的对象成员

b) 假如子类中有对父类方法的重写,那么根据多态机制,通过f访问这个方法的时候实际访问的是子类中重写的方法。

i. f只能访问FatherClass.class的信息(注意这里指的是编译期编译器只知道fFatherClass类型,不知道f具体指向什么对象,运行期才知道指向什么对象),而子类重写的方法,父类中也存在,即SonClass.class重写的方法,FatherClass.class里也有(如果SonClass.class里有但是FatherClass.class里没有的方法,f也不能直接调用),所以f可以访问,但是调用的时候(注意这里指的是运行期),f实际指向的是SonClass对象,所以调用的是SonClass对象的方法。

c) 问题是如果子类重写的方法中访问了专属于子类的成员变量,这时候通过父类引用f还可以调用那个被重写的方法吗?

i. 可以,要分清编译期和运行期,编译期是编译器检查语法和类型,运行期是解析器解析伪代码为机器指令而执行,编译期编译器会检查f的访问范围,也就是f的访问不超过FatherClass.class的信息就不会出错,运行期解析器会解析方法的代码指令,因为f指向子类对象,所以会解析子类重写的方法代码指令,而子类对象的内存空间是包含子类的成员变量的空间的,所以也不存在子类成员变量没有分配内存的问题,所以可以调用。

29.OSI七层模型:OSI中的层 功能 TCP/IP协议族

a) 应用层 为应用程序提供了网络服务。 文件传输,电子邮件,文件服务,虚拟终端 TFTPHTTPSNMPFTPSMTPDNSTelnet

b) 表示层 数据格式化,代码转换,数据加密 没有协议

c) 会话层 解除或建立与别的接点的联系 没有协议

d) 传输层 负责向用户提供端到端的通信服务,实现流量控制以及差错控制;TCPUDP

e) 网络层 主要负责创建逻辑链路,以及实现数据包的分片和重组,实现拥塞控制、网络互连等功能;

f) 数据链路层 主要负责在通信的实体间建立数据链路连接;

g) 物理层 主要负责在物理线路上传输原始的二进制数据;

30.如果只重写了findClass方法并没有重写loadClass方法的话,不会改变父类委托机制。

31.Java字符串的最大长度:

a) String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE,2147483647;又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。

b) 其实还要看看你设置的 JVM 的堆大小。Runtime.getRuntime().maxMemory(); 

c) 比较一下上述两者,读取的内容不要超过两者的最小值即可。


有需要的同学可以下载PDF文档查看,点击下载
备注
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/51396663
作者:WSYW126

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值