Java面试-常见基础笔试题目

1. Vector, ArrayList, LinkedList的区别

  Vector:①长度可变,以类似数组的形式存储于内存中,线程安全(同步),因为其大部分方法都有synchronized 关键字,正因为是同步的,所以进行频繁的数据操作时,必然会导致性能的下降。

      ②当增加的元素长度超过Vector 长度时,增加原来一倍的长度。

      ③如果是单线程应用,推荐使用ArrayList 来代替Vector 效率更高。

      ④如果是多线程应用,可以使用Vector 来代替ArrayList 实现同等功能,且能保证数据一致性。

  ArrayList:①长度可变,以类似数组的形式存储于内存中,线程不安全(异步),正因为是异步的,所以在多线程环境下使用是其常用方法是不安全的,如果一定要在多线程环境下使用,应该使用Colletions类中的静态方法synchronizedList() 对ArrayList 进行操作。例如:

List list = Collections.synchronizedList(new ArrayList<>());

       ②当增加的元素长度超过ArrayList 长度时,增加原来50% 的长度。

       

  LinkedList:①以双向链表存储于内存中,线程不安全(异步),正因为是异步的,如果在多线程环境下使用它,用Colletions类中的静态方法synchronizedList() 对 LinkedList进行操作。例如:

List list = Collections.synchronizedList(new LinkedList(...));

         ②因为是双向链表,LinkList 可以很方便在链表头或者链表尾插入数据,或者在指定结点前后插入数据,所以LinkList 的插入效率高于ArrayList ,但也因为是双向链表,所以查询效率低于ArrayList。

2. static块,构造块,构造函数的执行顺序

  查看案例

3. 重写override 跟重载overload 的区别

  重写是在子类中完全覆盖父类的方法,且方法返回值、方法名、方法参数、方法参数类型跟父类的完全一样,子类抛出的异常应该等于或者少于基类

  重载是类的内部可以允许有两个同名字的方法,但方法的参数个数或者参数类型不一样,即可称之为重载。例如:

①:

void func1(int a, int b)
void func1(int a, float b)

②:

void func1(int a, int b)
int func1(int a, int b)

以上两种情况可以称之为重载,但下面这种情况不可以称为重载,且写法是错误的,例如:

int  getCount(int a , int b)
void  getCount(int a, int b)

调用时,两个参数传进去,但是返回的是int 呢?还是void 呢?所以这种写法是不存在的,即使写了编译器也无法通过。

4. String,StringBuilder,StringBuffer三者的区别

①运行速度:StringBuilder > StringBuffer > String

  因为String 一创建就是字符串常量, 而其他两者为字符串变量

②StringBuilder是线程不安全的,而StringBuffer,String是线程安全的

  查看详细解释

5. synchronized的用法与区别

①作用于类的普通方法跟代码块,作用一样,取得的锁是对象。

②作用于类的静态方法,取得的锁是类,所以即使多线程操作的对象不一样,但方法是静态的,所以还是同步的

③作用于类,取得的锁是类,跟②是一样的。

  查看详细解释

  

原文地址:https://www.cnblogs.com/convict/p/9938566.html

时间: 2024-10-09 01:22:14

Java面试-常见基础笔试题目的相关文章

Java面试常见的一些问题

由于最近在准备面试,稀稀散散的整理了一些Java常见的问题,问题的答案都是在网上各网站找的,有什么不对的地方还请各位大神指出.由于是用来学习的,所以如果有朋友发现自己的原创不希望在此公开请M我,我会速速删除. 1.Java 中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问.如果没有同步,当一个 Java 线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果. 2.Sleep ().suspend ()和 wait ()之间有什么区别?

java面试复习基础

*基于javaGuide java基础 重载(override)要求子类的返回值小于父类(类型相同),修饰符使用范围也大于分类,抛出异常小于父类. 静态方法不能调用类非静态方法,因为静态方法可以在不生成对象的时候直接调用. 默认构造方法,因为子类构造的时候也调用super()父类,所以需要增加一个默认构造函数,避免编译出错. java只有值传递:按值调用,按引用调用(其实也是按值调用,因为传的是一个指针地址) 线程状态:初始状态->就绪状态->运行状态.阻塞状态.等待状态.超时等待状态->

Java面试2018常考题目汇总(一)(转)

一.JAVA基础篇-概念 1.简述你所知道的Linux: Linux起源于1991年,1995年流行起来的免费操作系统,目前, Linux是主流的服务器操作系统, 广泛应用于互联网.云计算.智能手机(Android)等领域.由于Java主要用于服务器端的开发,因此Java应用的部署环境有很多为Linux. Windows操作系统的目录结构,是以盘符为单位,C盘.D盘.E盘等等,数据存储在各个盘符之下,而Linux操作系统最顶层只有一个根目录root,所有文件都存储在这一个根目录之下. Linux

Java开发常见基础题大全

1.&和&&的区别? &:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true. &&:短路与,如果第一个表达式为false时,第二个表达式就不会计算了. 2.”==”和equals方法究竟有什么区别? ==:表示两个变量的值是否相等,用于比较两个基本数据类型的数据或者引用变量. equals:用于比较两个独立对象的内容是否相同.字符串的比较也用equals. == 对于基本类型来说是值比较,对于引用类型来说是比较的是引用:而 equal

Java面试之基础一

1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境. JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境. 具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了很多 Java 程序调试和分析的工具.简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你

java面试核心基础(1)

1.以下代码的执行结果 String s1 = "helloworld"; String s2 = "hello" + new Stirng("world"); System.out.println(s1 == s2); 分析:false,s1 == s2这比較的是两个对象的地址,而不是值.s2中存在new Stirng("world"),该语句会新开辟一块内存来存放world字符串,因此,s1与s2的地址不同 2.以下说法正

Java面试总结-基础篇2

1. mvn的dependency-management dependency-management是声明依赖,不实际引入,主要用于在父依赖中统一各依赖的版本,否则,各个子模块在引用同一依赖时,难免会出现版本混乱的情况.类似于类继承和重写的关系 2. springboot优化了哪些 @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan1. 简化启动过程2. 约定大于配置,简

java面试常见题

1.  String s1 = '123'; String s2 = new String();区别 2. 多线程的两种实现方式的区别 继承Thread和实现Runnable接口 3. 单列设计模式懒汉式和饿汉式有什么不同   ***** 懒汉式特点:延迟加载.延迟加载在多线程中会出现安全问题,通过加同步来解决,加同步效率低,用双重判断方式解决效率低.同步的时候用字节码对象(即class文件).11天-14-多线程(多线程-单例设计模式-懒汉式) 4. 写一个死锁程序 ***

java面试互联网应该知道的知识-1

一 Java中的值传递和引用传递(非常重要) 首先要明确的是:"对象传递(数组.类.接口)是引用传递,原始类型数据(整型.浮点型.字符型.布尔型)传递是值传递." 那么什么是值传递和应用传递呢? 值传递是指对象被值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象.(因为值传递的时候,实际上是将实参的值复制一份给形参.) 引用传递是指对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用.因此,外部对引用对象的改变会反映到实际的对象上.(因为引用传递的时候,实际上