[转帖]java基础面试/笔试题整理(一)

java基础面试/笔试题整理(一)

https://www.jianshu.com/p/4ea28c5b4f3e

这里说一下,因为我前不久在找工作,加上平时没事刷刷牛客答答题当学习了,所以在这里整理出来的题目个人色彩很浓,都是我做过的并且错了的!!!(我觉得我都能做对的几乎所有人都会,没啥整理的必要)
然后我会按照笔记的顺序写。所以没什么顺序而且有的可能重复,对付看吧/(毕竟错题本厚厚的一大本)

  1. 一个文件中只能有一个public class。
    这个说法是错误的,因为可能有内部类的情况。
  2. 一个类中可以有两个main方法。
    这个说法是正确的,可以重载。只不过作为入口的main方法只有一个。一个类可以有main方法也可以没有,而只有一个main方法的时候也可以是任意访问权限,因为这个类不一定要执行,可能只是辅助类。
  3. 下列命令中:
    .java是用来运行一个.class文件的
    .javadoc是用来生成api文档的
    .jar是用来生成jar包的
    .javac是用来把java文件编译成.class文件的
  4. String s = new String(“xyz”),如果“xyz”并没有被创建过,则该语句创建了两个String 对象。一个在堆中,第二个在字符串常量池中。如果在java字符串常量池中已经存在就只会创建一个。
  5. byte的取值范围是127到-128.(我记得当时学二进制补码的时候有个图很直观,有兴趣的可以自己去找找)
    short a = 128;
    byte b = (byte)a;
    b 的值为-128。因为强制转换出现溢出,128可以理解为127+1,即127
    后面是-128。
  6. byte a1 = 2,a2 = 3,a3;
    short s = 16;
    a2 = s;//这个编译错误,因为short转为byte需要强制转换
    a3 = a1 * a2;//这个也是编译错误,因为 a1 * a2的结果为int型,转为byte型也需要强制转换。
  7. 以下方法可以取到http请求中的cookie的值的有:
    request.getAttribute(key,value);//这个是在服务器端的操作。
    request.getHeader(String name);//以字符串的形式返回指定的请求的值,cookie也是头的一种。
    request.getCookies();//返回一个数组,包含客户端发送该请求的所有的cookie对象。
    request.getParameter();//是通过容器的实现来获取类似post/get方式传入的数据。
    所以本题可用的方法只有第二个和第三个。
  8. 接口中的变量默认是public static final的,方法默认是public abstract的。
  9. java继承中对构造函数是不继承的,只是显示或者隐式的调用。
  10. Math.ceil(num);//天花板,向上取整
    Math.floor(num);//地面 向下取整
    需要注意的是符号不变,数据类型不变。
  11. java中垃圾回收分为scanvenge gc 和 full gc,其中full GC的触发条件:
  • 直接调用system.gc();
  • 持久代满了会触发full GC;
  • 新生代满了会存survivor,survivor满了就会存老年代,老年代满了就触发full GC了。
  • 其他可能还有,在这就不多说了。对垃圾回收有疑惑的可以点下面链接
    深入JVM(二) java垃圾收集器与内存分配策略
  1. Double d = 3;//这个声明是错误的,Double是包装类,int无法直接转换成包装类型Double。
    double d = 5.3e12;这个是正确的,5.3e12表示5.3*10的12次方。
  2. 通过new创建的String类型会在堆中存放。
  3. java的泛型机制仅仅是“语法糖”。他不会影响运行时间。因为在编译阶段虚拟机就会把泛型的类型擦除(这就叫做泛型擦除机制)。
  4. call by value是指传递
    call by reference 是引用传递
    值传递不会改变实际参数的数值,引用传递能改变实际参数的内容,但是不会改变实际参数的参考地址。
  5. java程序的种类有:
  • 内嵌于web文件中,浏览器观看的Applet;
  • 可独立运行的Application;
  • 服务器端的Servlets;
  1. list,set都继承自collection接口,Map是顶层接口,不继承自collection。
package demo;
public class VectorSychronized { public static void hello() { System.out.println("hello"); } public static void main(String[] args) { VectorSychronized vectorSychronized = null; vectorSychronized.hello(); } } 

这段代码的运行结果不会报空指针异常的。你猜到了没(类名是之前学jvm的时候随便起的,别在意)?
原因只要访问VectorSychronized这个类都会加载hello方法。在其他类类的静态方法中可以调用公开的静态方法。
这里之所以不发生空指针,是因为必须是去引用堆对象才会有空指针,而这个hello方法是static类型的,方法本身就没有指针,所以并不会空指针。

  1. class.getDeclaredMethods();//返回类或者接口的所有方法(不包括继承)
    class.getMethods();//返回类 所有public方法。
  2. 索引是从1开始而不是从0开始。
  3. HashMap没有contains方法,改成了containsValue和containsKey。因为contains方法容易让人误解。
  4. java调试器jdb.exe
  5. 在web开发中实现会话跟踪可用:session,cookie,地址重写,隐藏域。
  6. 泛型只是在编译器保证对象类型相同的技术,因此泛型指定的元素不具有继承性。其实这个归根结底还是因为泛型只是java的“语法糖”。
    若A extends B,List<A> a;List<B> b;
    那么 a=b是错误的!不同类型不能相互赋值。
  7. socket通信编程中:
  • 服务端ServerSocket提供socket实例。
  • 客户端Socket提供socket实例。
  1. toLowerCase()和toUpperCase()方法产生的字符串对象是new出来的,所以不能与字符串常量==,可以str.equals();
  2. jsp四大作用域:page(最小)<request<session<application。
    存储在application对象中的属性可以被同一个应用程序的所有用户访问。
  • session:当前用户上下文信息
  • application:当前应用
  • request:当前请求
  • pageContent:当前页面
  1. jsp语法:
  • jsp表达式:<%= ... %>
  • jsp脚本:<% ... %>
  • jsp声明:<%! ... %>
  • jsp注释: <%!-- ... --%>
  1. ArrayList的内存结构是数组,其本质是顺序存储的线性表。插入和删除操作会引发后续元素移动,效率低。但是随机访问的效率很高。
    LinkedList的内存结构是用双向链表存储的,链式存储结构插入和删除效率高,不需要移动。但是随机访问效率低,需要从头开始向后依次访问。
  2. 局部内部类不等同于内部类,是放在代码块或方法中的。不能有访问控制修饰符,也不能被static修饰。

好了,今天就整理到这里。然后其实从头看一遍发现有些知识点我都忘了。这次整理出来也算是加深印象,如果有帮助谁了也算是功德?虽然我不信佛。。反正与人方便于己方便。然后这里的一些解释都是百度或者问人的,应该都是对的,但是如果你觉得哪个说法不够准确欢迎指出,我会注意随时改。我是打算把我几百个错题都整理进来,所以可能这是一个系列故事,就酱吧。
然后全文手打不易,如果你觉得有帮到你或者有点用,别吝啬的点个喜欢和点个关注哦~~

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/12162770.html