「java陷阱题库」java 坑

博主:adminadmin 2023-03-20 04:59:07 532

本篇文章给大家谈谈java陷阱题库,以及java 坑对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

几道JAVA题目,求好心人给下答案,感激不尽

1、public static void main(String[] args)

2、public finall static

3、3

4、抽象类

5、implements

6、类:一个包含属性、方法,使用class关键字定义

   对象:创建对象必须使用new关键字,对象其实在内存中存储的是类的引用地址。

7、try是可能发生异常的内容;

   catch是发生异常后要处理的代码;

   finally是始终执行的,比如关闭资源等。

8、

public class Demo {

//小明今年12岁,他母亲比他大20岁。编程计算多少年后他母亲的年龄是小明的2倍。

public static void main(String[] args) {

System.out.println(getYeah());

}

public static int getYeah(){

int xmAge = 12,mqAge = 20,yeah = 0;

while(true){

if(mqAge / 2 == xmAge){

return yeah;

}

mqAge++;

yeah++;

}

}

}

9、

public class Demo {

public static void main(String[] args) {

new Thread(new Piao()).start();

new Thread(new Piao()).start();

new Thread(new Piao()).start();

new Thread(new Piao()).start();

}

}

class Piao implements Runnable{

private static int piao = 1;

public  void run(){

while(true){

synchronized(Piao.class){

if(piao  100){

System.exit(0);

}

System.out.println(Thread.currentThread().getName()+"出票:" + piao + "号");

piao++;

}

}

}

}

java有内存溢出吗?如果有是什么情况?

内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。

所以我们应该明确:存在内存溢出的因不一定导致内存溢出的果。。。

1。JAVA操作文本文件为什么超过3万行就内存益处啊?

PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));

//PrintWriter out = new PrintWriter(fileName);

//FileOutputStream out = new FileOutputStream(fileName);

while (rs.next()) {

for (int j = 1; j = totalColumn; j++) {

out.write(rs.getObject(j).toString());

out.write("\t");

}

out.write("\n");

out.flush();

}

}

我在代码中 写了 out.flush()用来刷新该流的缓冲; 可是当我的记录数超过3W时就报了内存益处的问题了,难道JAVA不能边读边写吗?还是out这个对象随着指向的fileName文件的边大占用内存也大了吗??到底怎么来实现用JAVA写更多的数据而不内存益处呢

答案是:就在while(rs.next()) 当rs.next()时内存不断增大,而不是写流的问题,JAVA的ResultSet真是麻烦,而且ResultSet还不能clone(); 所以记得在做项目的时候,经常要设置:jdbc.setMaxRows(100*10000); //设置能容纳100万行记录-----这个就是防止内存泄露的哈------------------- 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;

jdbc.setQueryTimeout(60*30); //设置超时时间是30分钟

2。java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。

public class Stack { //长生命周期

private Object[] elements=new Object[10]; //当数组容器中没有东西时是无用的,但是无法回收~~elements是短生命周期

private int size = 0;

public void push(Object e){

ensureCapacity();

elements[size++] = e;

}

public Object pop(){

if( size == 0)

throw new EmptyStackException();

//这里还是引用了,只是指针变位置变化而已,他确实返回了那个对象,但是他却没有断开那个对象的引用,也就是说有两个地方会持有这个对象的引用,调用pop的地方,和elements中

return elements[--size];

}

private void ensureCapacity(){

if(elements.length == size){

Object[] oldElements = elements;

elements = new Object[2 * elements.length+1];

System.arraycopy(oldElements,0, elements, 0, size);

}

}

}

上面的原理应该很简单,假如堆栈加了10个元素,然后全部弹出来,虽然堆栈是空的,没有我们要的东西,但是这是个对象是无法回收的,这个才符合了内存泄露的两个条件(必要条件):无用,无法回收。

例子1

public class Bad{

public static Stack s=Stack();

static{

s.push(new Object());

s.pop(); //这里有一个对象发生内存泄露

s.push(new Object()); //上面的对象可以被回收了,等于是自愈了,因为引用被覆盖了

}

}

因为是static,就一直存在到程序退出,但是我们也可以看到它有自愈功能,就是说如果你的Stack最多有100个对象,那么最多也就只有100个对象无法被回收其实这个应该很容易理解,Stack内部持有100个引用,最坏的情况就是他们都是无用的,因为我们一旦放新的进取,以前的引用自然消失!

内存泄露的另外一种情况:当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。

这是属于: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;

3。代码中存在死循环或循环产生过多重复的对象实体;

4。启动参数内存值设定的过小;

java题求解

1.首先获取一个1-100的整数,代码很简单,要是不会就百度搜索,有很多

2.然后再获取用户输入的数字(一、二步的代码我就不写了)

int A = 系统随机出的数字;//获取系统随机出的数字

int B = 用户输入的数字;//获取用户输入的数字

int num =0;//初始化一个变量

//写一个循环,只要A不等于B就一直循环下去

for(int i =0; A != B;i++){

num++;

B = 用户输入的数字;//再次获取用户输入的数字

}

//因为num初始值为0,所以只有在0的情况下是一次就猜中

switch(num){

case 0:

//用户是天才

break;

case 1-2://1-2就是猜2次或者3次

//用户很聪明

break;

case 3-5:

//用户猜了num+1次

break;

}

if(num 5){

//用户很笨

}

//这只是其中一种方法,还可以使用if else if结构来判断等等,不懂可以继续追问

作为一个面试官,我会问初级java工程师哪些问题?

初级java工程师多数是刚毕业或者工作1,2年的新人。对于新人,面试中基础问题会问道很多,因为先要考察这个人的基础。

关于基础类的题目,我在面试初级java工程师的时候一般会问下面两大类问题,每类5个题目,这样下来我就基本可以了解这位工程师的程度了。

java基础类

面向对象基础类

java基础类

1.描述一下java的访问修饰符,和它们之间的区别?

回答:如果可以回到出public,private,protected,就算是ok;回答出default的,加分。

2. int和Integer 区别?

回答:如果回答出Integer是int的包装类,就算ok;回答出其他的基本类型和它们相应的包装类,加分。

3.如何定义一个单精度浮点类型的变量?

回答:float 变量名=1.2f ;回答出不加最后的f为双精度浮点类型,加分

4. equals和==的区别?

回答: equals是值比较(一般处理java开发都会这么说,算是ok的)而==是引用比较(或者对象比较);回答equals是可以自定义的,加分

5.将一个数组作为参数传递到一个方法中,在方法中,数组内的元素值被改变了,那么在方法外部,这个数组内的元素是否也被改编了?

回答:是,因为java方法中传递的是引用,就ok。如果回答中,将引用说明了自己的理解,加分。

面向对象基础类

1.重载和重写的区别?

回答:这个看个人理解,理解没有什么大的偏差就ok;回答出多态相关的,加分。

2.构造方法能不能重载?

回答:可以重载,ok;回答构造方法时不能继承的,所以如果要调用指定父类构造器就必须重写子类构造方法,加分。

3.抽象方法(abstract)是否可以被final、static、native修饰?

回答:都不可以,因为抽象方法是必须子类实现的,final方法时不可以被重写的,static是父类必须实现的方法,native是本地语言实现的方法。回答出封装和继承相关的,加分

4.当父类引用指向子类对象的时候,子类重写了父类方法和属性,那么当访问属性的时候,访问是谁的属性?调用方法时,调用的是谁的方法?

回答:访问的是父类的属性,调用的是子类的方法,ok;如果可以画图解释的话,加分

5.抽象类和接口有什么异同?

回答:一些类定义上的区别,ok;回答在应用过程中,如何根据业务定义接口,加很多分

最后,如果前面问题回答的不错,会补充两个编程习惯问题。

1.在你写过的代码中,你写过超过2层的循环吗,怎么实现的?

回答:没有,就算ok;如果回答有,听一下实现,如果原因说不出来,扣分。

2.在你写过的代码中,if语句最多嵌套了几层,最多有多少分支,怎么实现的?

回答:3层以下,就算ok;如果回答3层以上,听一下实现,如果原因说不出来,扣分。

4,5个分支,就算ok;如果回答5个分支以上,听一下实现,如果原因说不出来,扣分。

最后两个题其实比较陷阱,但是正是一个反向的思考才能了解面试者之前的工作状态。

如果面试者在平日里就有好的习惯,自然不用担心。

Java陷阱?请高手回答

1.应该是类型不匹配

true/false是boolean类型,是基础数据类型,null一般指空对象,所以报错

再给你举个例子:

int a = null (报错)

Integer a = null(正确)

2.换成这样是可以的

fun(i == 0 ? Boolean.TRUE : (i == 1 ? Boolean.FALSE : null))

其中Boolean.TRUE/Boolean.FALSE是对象

3.看看源代码

public static final Boolean FALSE = new Boolean(false);

public static final Boolean TRUE = new Boolean(true);

Java面试中有哪些陷阱

Java开发求职,Java程序员面试中的常见陷阱。罗了一些网络上以及我和身边大牛们去面试的时候曾经踩过的一些坑,分享给大家,在面试的时候提高面试成功率。

很多小伙伴去面试的时候应该都经历过这样的情况“面试官问的我都知道可就是回答不上来,明明在IDE中几分钟就可以写出来的代码可是一放在考卷上就不会了”。

其实面试并没有什么道理可讲,很少会有公司去面试的时候给你一个IDE工具让你现场编码,基本都是面试官会当场问,或者是笔试等等。

有的同学可能认为如果对于先进的框架掌握了那面试基本就十拿九稳了,其实不然一个老道的面试官大多不会问你Hibernate、Struts等框架底层实现,只是要求你会用就行。而给你挖的最多的坑还是对于基础的掌握。

我搜罗了一些网络上以及我和身边大牛们去面试的时候曾经踩过的一些坑,希望可以对大家面试有一点点帮助。

Java程序员面试常见陷阱一、final finally finalize的区别

1、final修饰符,Java中的关键字,用final修饰变量的必须在声明时就给定初始值,而且不允许被修改;用final修饰方法不允许被重写;用final修饰的类不允许被继承。

2、finally语句块是异常处理结构的最后执行部分,完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论之间的try-catch是否顺利执行完毕,都会执行finally语句。

3、finalize()是Java为类提供的一种特殊方法,垃圾收集器一旦准备好释放无用对象占用的内存会首先调用finalize()方法然后才能真正回收对象的内存,通过finalize()方法就可以在垃圾收集器运行期间进行一些特殊的工作。

Java程序员面试常见陷阱二、HashMap和Hashtable的区别

1、HashMap和Hashtable都实现了Map接口,两者最主要的区别在于Hashtable是线程安全,而HashMap则是非线程安全。

2、HashMap可以使用null作为key,而Hashtable则不允许null作为key。

3、HashMap是对Map接口的实现,而Hashtable实现了Map接口和Dictionary抽象类。

Java程序员面试常见陷阱三、String 和 StringBuffer 的区别

JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含多个 字符的字符数据。这个 String 类提供了数值不可改变的字符串。而这个 StringBuffer 类提供 的字符串进行修改。当你知道字符数据要改变的时候你就可以使用 StringBuffer。典型地你可以使用 StringBuffers 来动态构造字符数据。另外,String 实现了 equals 方法,new String(“abc”).equals(newString(“abc”)的结果为true,而StringBuffer没有实现equals方法, 所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为 false。

Java程序员面试常见陷阱四、Java实现多态的机制是什么

靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运 行的那个对象的方法,而不是引用变量的类型中定义的方法。

Java程序员面试常见陷阱五、说出数据连接池的工作机制是什么

J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端 程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空

闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池 连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。 实现方式,返回的 Connection 是原始 Connection 的代理,代理 Connection 的 close 方法 不是真正关连接,而是把它代理的 Connection 对象还回到连接池中。

Java程序员面试常见陷阱六、JSP和Servlet的区别

JSP 是 Servlet技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。JSP 编译后是"类 servlet"。

Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以 组合成一个扩展名为.jsp 的文件。JSP 侧重于视图,Servlet主要用于控制逻辑。

关于java陷阱题库和java 坑的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。