概述
一、单项选择题
1 2 A 3 A 4 D 5 B
6 D 7 B 8 D 9 10
11A 12 13A 14B 15
16B 17C 18A 19D 20C
1、表达式“b”+10 =b10 ‘b’+10=108
2、封装、继承、多态
3、chmod 644 filename 拥有者有读写权限,属性组用户和其他用户只有【读权限】
4、提供java存储数据能力的包是java.sql
5、String a = "hello"; String b = "he" + new String("llo"); System.out.println(a == b); 【false】
基础
1、java中会存在内存泄漏吗,简单描述
存在,程序创建对象,没有使用,却一直被调用,无法被垃圾回收。HashSet。
2、String s = new String("xyz") ,创建几个字符对象,对象位于什么存储区?
2个对象,一个存放在常量池中(jdk1.8后方法区),另一个存放在堆heap(内存)中。
3、Java异常try里面有return,finally里的code代码会执行吗,什么时候执行,在return前还是后执行?
会执行,在return将要返回但返回时执行,在return之后执行
4、如何避免运算过程中Double浮点精度丢失问题?
小数的二进制不准确,1、转换为long、int计算,最终改为dubbo,2、BigDecmal 并且 构造函数使用String类型
5、请详细解释orcle的高水位问题,他对数据操作有什么影响
在orcle中,High-water mark 被形容数据块的使用位置,形容那些块已经被使用,那些没有
MSSM和ASSM
1)回收高水位操作shrink space可对高水位之下未储存数据的block加以回收,并降低高水位线。既能减少空间使用,又能提高查询效率,而对表内的数据、表上的索引没有影响。
2)回收高水位操作shrink space是表和段级别的操作,【能释放表空间文件内的空】,但不能缩小表空间文件的大小。
3)回收操作是DDL操作而非DML操作,不由应用程序完成,需要管理员定期执行。
6、接口和抽象类的区别
1)抽象类是类有构造器,接口没有构造器
2)抽象类和接口都不能被实例化,都需要子类继承与实现
3)抽象类可以有抽象方法和非抽象方法,就扣只能有抽象方法
4)一个类只能实现一个抽象类,一个类可以实现多个接口
5)子类继承抽象类建议实现所有的抽象方法,否则子类也需声明为抽象类、接口必须实现接口里面的所有方法
7、Spirng如何处理线程并发问题(***)
Spring的Controller默认是Singleton(单例),非线程安全的(避免在controller使用变量)
每个请求request过来,系统都需要有instance处理
1)在Controller中使用【ThreadLocal】变量
ThreadLocal<Long>startTime = newThreadLocal<Long>(); 定义一个ThreadLocal 变量
startTime.set(System.currentTimeMillis()); 写入值
startTime.get(); 读取值
2)在spring配置文件Controller中声明 scope="prototype",每次都创建新的controller
8、Java中内存泄漏常常导致OutOfMemoryError错误,介绍java的内存管理机制并说明那些情况容易引起内存泄漏?
1 )PermGen space(1.8后更新为Metaspace不存在)程序中使用了大量的jar或class造成
a、增加java虚拟机中的XX:PermSize和XX:MaxPermSize参数的大小,
其中XX:PermSize是初始永久保存区域大小,XX:MaxPermSize是最大永久保存区域大小。
如针对tomcat6.0,在catalina.sh 或catalina.bat文件中一系列环境变量名说明结束处(大约在70行左右)
增加一行:JAVA_OPTS=" -XX:PermSize=64M -XX:MaxPermSize=128m"
b、清理应用程序中web-inf/lib下的jar,如果tomcat部署了多个应用,
很多应用都使用了相同的jar,可以将共同的jar移到tomcat共同的lib下,减少类的重复加载。
2) Java heap space(创建的对象太多,在进行垃圾回收之间,虚拟机分配的到堆内存空间已经用满了)
a、 检查代码中是否有死循环或递归调用。
b、检查是否有大循环重复产生新对象实体。
c、检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,
就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,
上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
d、检查List、MAP等集合对象是否有使用完后,未清除的问题。
List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
e. 增加Java虚拟机中Xms(初始堆大小)和Xmx(最大堆大小)参数的大小。如:set JAVA_OPTS= -Xms256m -Xmx1024m
3)unable to create new native thread
JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。
有人发现,在【线程个数很多】的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。
发生内存溢出时进程中到底都有什么样的线程,这些线程是否是应该存在的,是否可以通过优化来降低线程数;
【我们可以通过调整jvm参数】,降低为每个线程分配的栈内存大小来解决问题,例如在jvm参数中添加-Xss128k将线程栈内存大小设置为128k。
数据库题
The Employee table holds all employees。Every employee has an Id,a salary,and there is also a column for the department Id
write a sql query to find employess who have the highest salary in each of the departments
for the above tables,Max has the highest salary in the it department
and henry has the highest in the sales departme
表e join 中间表g on 表e.did = g.did join 表d on e.id = d.id
where e.s = g.max
SELECT
d. NAME Department,
e. NAME Employee,
e.Salary Salary
FROM
Employee e
JOIN (
SELECT
MAX(Salary) max,
DepartmentId
FROM
Employee
GROUP BY
DepartmentId
) g ON e.DepartmentId = g.DepartmentId
JOIN Department d ON (e.DepartmentId = d.Id)
WHERE
e.Salary = g.max
Student(S#,Sname) 10000条记录
Cource(C#,Cname,T#) 9条记录
SC(S#,C#,Score) 89991条记录
Teacher(T#,Tname) 3条记录
1选择课程001的成绩大于课程002的成绩的学生ID;
SELECT sc1.sid
FROM sc sc1
WHERE sc.cid = 1 AND EXISTS
(SELECT sc1.sid FROM sc sc2
WHERE sc2.cid = 2 and sc1.sid = sc2.sid and sc1.score > sc2.score)
2查询所有平均成绩大于60分的学生ID,学生姓名;
SELECT student.sid,student.sname,avg(sc.score) avgc
FROM student,sc
WHERE student.sid = sc.sid
GROUP BY sc.sid HAVING(avgc >60)
3查询所有学生的学生ID,学生姓名,总科目数,总成绩;
SELECT student.sid,student.sname,COUNT(*),sum(sc.score)
FROM student,sc
WHERE student.sid = sc.sid
GROUP BY sc.sid
2、如何在多线程中避免发生死锁?(A)
允许进程同时访问某些资源。
允许进程强行从占有者那里夺取某些资源。
进程在运行前一次性地向系统申请它所需要的全部资源。
把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。
3、以下为求0到1000以内所有奇数和的算法,从中选出描述正确的算法(A)
①s=0;②i=1;③s=s+i;④i=i+2;⑤如果i≤1000,则返回③;⑥结束
①s=0;②i=1;③i=i+2;④s=s+i;⑤如果i≤1000,则返回③;⑥结束
①s=1;②i=1;③s=s+i;④i=i+2;⑤如果i≤1000,则返回③;⑥结束
①s=1;②i=1;③i=i+2;④s=s+i;⑤如果i≤1000,则返回③;⑥结束
4、关于递归法的说法不正确的是(D )
程序结构更简洁
占用CPU的处理时间更多
要消耗大量的内存空间,程序执行慢,甚至无法执行
递归法比递推法的执行效率更高
5、字符串”ABCD”和字符串”DCBA”进行比较,如果让比较的结果为真,应选用关系运算符(B)
>
<
=
>=
正确答案:B
以下运算符中运算优先级最高的是( D)
+
OR
>
若串S=”UP!UP!JD”,则其子串的数目(B)
33
37
39
35
在(D)中,只要指出表中任何一个结点的位置,就可以从它出发依次访问到表中其他所有结点。
线性单链表
双向链表
线性链表
循环链表
下面程序的输出是?(B)
public class Main {
public static void main(String[] args) {
Other o = new Other();
new Main().addOne(o);
System.out.println(o.i);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
0
1
编译出错
运行出错
根据类加载器加载类的初始化原理,推断以下代码的输入结果为?(A)
public class Test {
public static void main(String[] args) throws Exception{
ClassLoader classLoader=ClassLoader.getSystemClassLoader();
Class clazz=classLoader.loadClass("A");
System.out.print("Test");
clazz.forName("A");
}
}
class A{
static {
System.out.print("A");
}
}
TestA
ATestA
ATest
Test
Object类不含有以下哪种方法?(A)
equal
wait
notify
clone
正确答案:A
关于下面程序 ThisTest .java 运行结果 说法正确的是 : ( B)
public class ThisTest {
public static void main(String args[]) {
String x="7";
int y = 2;
int z=2;
System.out.println(x+y+z);
}
}
11
722
22
程序有编译错误
以下哪项不属于java类加载过程?B?
生成java.lang.Class对象
int类型对象成员变量赋予默认值
执行static块代码
类方法解析
下面有关JVM内存,说法错误的是?(C)
程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
方法区用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,是线程隔离的
原则上讲,所有的对象都在堆区上分配内存,是线程之间共享的
list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?(A)
Iterator it = list.iterator();
int index = 0;
while (it.hasNext())
{
Object obj = it.next();
if (needDelete(obj)) //needDelete返回boolean,决定是否要删除
{
//todo delete
}
index ++;
}
it.remove();
list.remove(obj);
list.remove(index);
list.remove(obj,index);
在Java中,以下关于方法重载和方法重写描述正确的是?(D)
方法重载和方法的重写实现的功能相同
方法重载出现在父子关系中,方法重写是在同一类中
方法重载的返回值类型必须一致,参数项必须不同
方法重写的返回值类型必须相同或相容。(或是其子类)
以下代码打印出(C)
public static void main(String[] args) {
String classFile = "com.jd.".replaceAll(".", "/")+"MyClass.class";
System.out.println(classFile);
}
com/jd/MyClass.class
com. jd
///MyClass.class
com. jd
已知显示器上有2个矩形(显示器左上角坐标为0,0,想右下分别为x轴和y轴正方向)
第一个矩形的左上角坐标为(x1,y1)、(x2,y2),
第二个矩形的左上角和右下角坐标为(x3,y3)、(x4,y4),求相交矩形的面积
a、((r1.right < r2.left) || (r1.bottom > r2.top))
((r2.right < r1.left) || (r2.bottom > r1.top))
对立事件(Complementary event,直译为互补事件) P(Ac)=1?P(A)
实现快速排序
最后
以上就是可爱大炮为你收集整理的Java基础常识及面试题(二)的全部内容,希望文章能够帮你解决Java基础常识及面试题(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复