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的用法与区别

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

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

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

  查看详细解释

6. 单例模式的任意一种写法

class Singleton {

    private final static Singleton INSTANCE = new Singleton();

    public static Singleton getInstance(){
return INSTANCE;
}
}

单例模式的8种写法参考

7.考Java重载方法,典型的是重载方法参数优先级

public class Test{

    // ①
public void myMethod(Object obj) {
System.out.println("My Object");
} // ②
public void myMethod(String str) {
System.out.println("My String");
} public static void main(String args[]) {
Test t=new Test();
t.myMethod(null); } }

  结果是输出“My String”,重载方法参数个数一样时,会自动找参数类型匹配的最接近的接口类型或者父类类型。对于这道题,null对象虽然是没有实际分配空间的,但是它也是个对象,所以优先匹配到String类型参数的方法,如果注释掉②处的代码,那么就匹配到Object 类型的代码,因为所有对象基于Object。

  总结:形参会从继承关系中从下往上开始搜索,越接近上层的优先级越低

  

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

  1. Java面试常见基础问题

    1.equals和==有什么区别? ==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致. 如:两个String对象存储的值是一样的,但是可能在内存里存储在不同的地方. equals ...

  2. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  3. java面试| 精选基础题(3)

    每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 系列文章 java面试| 精选基础题(1) java面试|精选基础题(2) 1.float f=3.4;是否正确? 答:不正确,编译无法通过 ...

  4. java面试| 精选基础题(2)

    关注微信公众号"java从心",置顶公众号 每天进步一点点,距离大腿又近一步! 阅读本文大概需要6分钟 继续挖掘一些有趣的基础面试题,有错望指出来哈,请赐教~ 1.包装类的装箱与拆 ...

  5. java面试常见题目

    JAVA相关基础知识面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用 ...

  6. java面试|精选基础(1)

    以下题目是从面试经历和常考面试题中选出有点儿意思的题目,参考答案如有错误,请联系小编指正,感谢! 1.反射 1.1定义 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法 ...

  7. Java面试常见知识点总结(三)

    21.volatile关键字: 一旦一个共享变量(类的成员变量.类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:   (1) 保证了不同线程对这个变量进行操作时的可见性,即一个线程 ...

  8. Java面试之基础篇(4)

    31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,”xyz”对应一个对象,这个对 ...

  9. Java面试专题-基础篇(1)

随机推荐

  1. 使用 spring security 中的BcryptPasswordEncoder对象对用户密码进行加密

    一.引入security启动器 在子工程中直接引入,不用指定版本号 二.在启动类中把BCryptPasswordEncoder对象注入到容器中 三.在service 层注入 四. 调用encode方法 ...

  2. Go语言系列之函数

    函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民". 函数 ...

  3. Mysql查询阻塞的sql

    SELECTp2.`HOST` 被阻塞方host,p2.`USER` 被阻塞方用户,r.trx_id 被阻塞方事务id,r.trx_mysql_thread_id 被阻塞方线程号,TIMESTAMPD ...

  4. MySQL使用时间作为判断条件

    背景:在开发过程中,我们经常需要根据时间作为判断条件来查询数据,例如:当月,当日,当前小时,几天内...... 1. 当月 我们只需要使用一个mysql的MONTH(date)函数即可实现.(注意判断 ...

  5. 【Java常用类】Math

    Math 说明 java.lang.Math提供了一系列静态方法用于科学计算.其方法的参数和返回 值类型一般为double型. 方法 abs 绝对值 acos,asin,atan,cos,sin,ta ...

  6. RHCSA 第三天

    1.将echo "This is my first time to use pipe"内容输出到屏幕上,且保存到pipe_data.txt中 2. 重定向: a.新建一个文件red ...

  7. Java学习小总结

    本学期主要学习Java程序语言及Javaweb相关知识,其中有相当一部分内容是暑假假期的学习内容,以下主要介绍一些Javaweb学习的总结. 以下教程均为个人建议(当然,适合自己的最好) 一.环境配置 ...

  8. 【刷题-LeetCode】207. Course Schedule

    Course Schedule There are a total of numCourses courses you have to take, labeled from 0 to numCours ...

  9. http 的get 与 post 的区别

    1.原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Http定义了与服务器交互的不同方法,最基本的 ...

  10. Ubuntu SVN 搭建

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion ...