1.JDK和JRE的区别:

  JDK:java开发工具包,提供java的开发环境和运行环境

  JRE:java运行环境,为java的运行提供所需要的环境

2. ==和qruals的区别:

  ==

    基本类型:比较的是指是否相等

    引用类型:比较的是引用是否相等

  equals:用来别叫两个方法的对象的内容是否相等

3.break和conutinue的区别:

  break用于完全结束一个循环,跳出循环体执行循环后面的语句

  continue用于跳过本次循环,执行下次循环。

4.final在java中的作用:

  修饰类,该类不能被继承

  修饰方法:该方法不能被重写

  修饰变量:修饰变量之后叫常量,且必须初始化,初始化之后不能被修改。

5.Math.round(11.5)等于多少 ,Math.round(-11.5)有等于多少?

  Math.round(11.5)返回的值是12

  Math.round(-11.5)返回的值是-11

6.String属于基础的类型数据吗?

  String属于引用数据类型,基础数据类型有8中:byte,boolean,char,short,int,float,long,double

7.String,StringBulider,StringBuffer的区别:

  String:是只读字符串,内容不能被改变

  StringBufferr/StringBuilder:表示的字符串对象可以直接进行修改,两者之间的区别在于StringBuilder实在单线程下使用的

  实现字符串的反转就是使用两者的reverse()方法;

8.String的常用方法:

  indexOF()::返回字符的索引

  charAt():返回指定索引处的字符

  replace():字符串替换。

  trim():去除字符串两端空白。

  split():分割字符串,返回一个分割后的字符串数组。

  getBytes():返回字符串的 byte 类型数组。

  length():返回字符串长度。

  toLowerCase():将字符串转成小写字母。

  toUpperCase():将字符串转成大写字符。

  substring():截取字符串。

  equals():字符串比较

9.抽象类必须要有抽象方法吗,和普通的类有什么区别,能使用final修饰吗?接口和抽象类的区别

  抽象类不一定要抽象方法

  抽象类不能被实例化,而普通类能被实例化也不能有抽象放方法

  抽象类不能使用final修饰,因为final关键字修饰的类是不能被继承的

  接口和抽象的区别:

    实现:接口使用implements来实现接口,抽象类必须使用extends类继承

    构造函数:抽象类可以有构造函数,接口不能有

    main方法:抽象类可以有main方法,且可以运行,接口不能有main方法

    实现熟练:类可以实现多个接口,但只能继承一个抽象类

    访问修饰符:接口的方法默认使用public修饰,抽象类的方法是任意访问修饰符

10.java的IO流:

  按功能分为:输入流和输出流

  按类型分为:字节流和字符流

11.Files的常用方法:

  Files.exists():检测文件路径是否存在。
  Files.createFile():创建文件。
  Files.createDirectory():创建文件夹。
  Files.delete():删除一个文件或目录。
  Files.copy():复制文件。
  Files.move():移动文件。
  Files.size():查看文件个数。
  Files.read():读取文件。
  Files.write():写入文件。

12.java中的容器都有哪些:

  

13.Collection和Collections的区别:

  java.util.Collection:一个集合接口,是集合类的顶级接口,其直接继承接口有List和Set

  Conllections:是集合类的一个工具类,提供了义序列的静态方法,用于对集合中元素进行排序

14.LIst、Set、Map之间的却别:

  

15.在Queue中的poll()和remove()的却别:

  poll和remove都是从队列中取出一个元素,但是poll在获取元素失败的时候会返回空,remove会抛出异常

16.Iterator怎么使用,特点有什么?

  Iterator是迭代器,一种设计模式,也是一个对象,可以遍历选择序列中的对象

  使用方法Iterator()要求容器返回一个Iterator,第一次调用Iterator的next()方法时,返回序列的第一个元素

  使用next()获得序列的下一个元素

  使用hasNext()检查序列中是否还有元素

  使用remove将迭代器返回的元素删除

17.并发和并发,线程和进程的理解:

  并行:指两个或者多个事件在同一时刻发生,且是在不同实体上的多个事件

  并发:指两个或多个事件在同一时刻间隔发生,实在同一实体上的的多个事件

  进程:是程序运行和资源分配的基本单位,拥有独立的内存单元

  线程:是进程的一个实体,是CPU调度和分派的基本单位,是比程序更小的独立运行的基本单位,

  守护线程:是个服务线程,准确来说是服务其他的线程。

  创建线程的方式:

    方式1:继承Thread类创建线程类,定义Thread类的子类,并重写该类的run方法

public class MyRunnable implements Runnable {
// 重写run方法
public void run(){
// 任务代码
for (int i = 0; i <10 ; i++) {
System.out.println("线程任务"+i);
}
} }

    方式2:通过Runnable接口创建线程类

public class Demo2MyRunnable {
public static void main(String[] args) {
// 创建实现类对象
MyRunnable mr = new MyRunnable();
// 创建Thread对象,并且把刚实现的类对象当做参数传递进来
Thread th = new Thread(mr);
// 开启线程
th.start();
for (int i = 0; i <5 ; i++) {
System.out.println("main线程"+i);
}
}

 18.线程的状态:

  线程有五种状态:

   创建:生成线程对象,没有调用该对象的start方法

   就绪状态:当调用线程对的start方法之后,就是就绪状态

   运行状态:线程调度将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态

   阻塞状态:线程正在运行的时候,被暂停,等待某个事件的发生在继续进行,sleep,suspend,wait等方法

   死亡状态:线程的run方法结束或者调用stop方法

19.sleep和wait的有什么区别:

  sleep():方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态

  wait():是Object类的方法,当一个线程执行到wait方法时,进入一个和对象相关的等待池,同时释放其他对象的机锁,使其它线程可以访问,通过notify和notifuAll方法来换新

20.run()和start()的区别:

  start():该方法启动线程,实现的是多线程的运行,无需等待run方法体代码执行完毕,可以直接继续执行下面的代码,此时线程处于就绪状态,并没有运行。

  run():该方法是在本线程例的,只是线程例的一个函数,而不是多线程的,如果直接调用,就是相当于一个普通函数,所有多线程执行时要是用start()方法。

21.创建线程池的方式:  

  ①. newFixedThreadPool(int nThreads)
  创建一个固定长度的线程池,每当提交一个任务就创建一个线程,直到达到线程池的最大数量,这时线程规模将不再变化,当线程发生未预期的错误而结束时,线程池会补充一个新的线程。

  ②. newCachedThreadPool()
  创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲线程,而当需求增加时,则可以自动添加新线程,线程池的规模不存在任何限制。

  ③. newSingleThreadExecutor()
  这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行。

  ④. newScheduledThreadPool(int corePoolSize)
  创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务,类似于Timer

  线程池的五种状态:

    Running、ShutDown、Stop、Tidying、Terminated。

22.什么是死锁,怎么防止:

  死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁

  防止死锁就先了解死锁的四个必要条件:

    互斥条件:进程对所分配到的资源不允许其他进程进行访问,若其他进程访问该资源,只能等待,直至占有该资源的进程使用完成后释放该资源

    请求和保持条件:进程获得一定的资源之后,又对其他资源发出请求,但是该资源可能被其他进程占有,此事请求阻塞,但又对自己获得的资源保持不放
    不可剥夺条件:是指进程已获得的资源,在未完成使用之前,不可被剥夺,只能在使用完后自己释放
    环路等待条件:是指进程发生死锁后,若干进程之间形成一种头尾相接的循环等待资源关系

23.ThreadLoacl的理解:

  ThreadLoacl:线程局部变量,是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享

24.synchronized的理解,与Lock的区别:

  synchronized:保证方法或者代码运行时,同一时刻只有一个方法可以进入到临界区,保证共享变量的内存可见性。

  java中每一个对象都可以作为锁,这是synchronized实现同步的基础。

  synchronized是java的内置关键字,Lock是java类

  synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁

  synchronized会自动释放锁(a 线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁;

  用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了;
  synchronized的锁可重入、不可中断、非公平,而Lock锁可重入、可判断、可公平(两者皆可);
  Lock锁适合大量同步的代码的同步问题,synchronized锁适合代码少量的同步问题。

Java基础回顾一的更多相关文章

  1. 四、Android学习第四天——JAVA基础回顾(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 四.Android学习第四天——JAVA基础回顾 这才学习Android的 ...

  2. 【Spring学习】【Java基础回顾-数据类型】

    Java基础回顾过程中,之前对于Java相关基础知识都是从这个人的博客看一些,那边的内容看一下,觉得不够系统化,决定用xmind脑图的形式,将Java基础知识回顾的作为一个系列,当前正在做的会包含: ...

  3. Java基础回顾_第二部分_Java流程控制

    Java基础回顾_第二部分 Java流程控制 Scanner对象(扫描器,捕获输入) import java.util.Scanner; public class Demo01 { public st ...

  4. Java基础回顾_第一部分

    Java基础回顾 基本数据类型 数值类型 什么是字节? 位(bit):是计算机中数据的最小单位 字节(byte):是计算机中数据处理的基本单位,习惯上用大写字母B来表示 1 B = 8 bit 字符: ...

  5. 1、java基础回顾与加强

    一.    基础回顾 1   集合 1.1  集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:    数组实现, ...

  6. Java基础回顾

    学习基础背景:Acmer.有C/C++基础 以[Java语言程序设计(基础篇)]第10版为参考(感谢YJJ的推荐),列出部分知识点,注意思考背后的原因和好处坏处. [14-16章——关于可视化编程的章 ...

  7. java基础回顾(2)

    java中只有两种类型:基础类型.引用类型 8中基本类型:byte  short int long float double char boolean,其中byte类型取值范围[-2^7~2^7-1] ...

  8. java基础回顾之IO

    Java的IO 是Java运用重要部分之一,涉及到的内容也比较多,容易混淆,一段时间不用,可能就会遗忘,要时常回顾记忆一下: (图片来源于网络) Java 流在处理上分为字符流和字节流. 字符流处理的 ...

  9. 输出 n=6 的三角数字阵(JAVA基础回顾)

    package itcast.feng; import java.util.Scanner; //需求:输出 n=6 的三角数字阵 //1 //2 3 //4 5 6 //7 8 9 10 //11 ...

随机推荐

  1. [日常] gitlab创建用户并把用户加入项目

    在gitlab里创建用户 默认密码是要求创建的用户自己去邮箱重置,也可以创建完成后直接点击编辑,就可以更改密码了 创建完用户,用户登录的时候需要去重置密码 创建完项目,就可以去使用了 也可以为这个项目 ...

  2. 关于 chromedriver、IEDriverServer、geckodriver 驱动器的几项注意点

    1. 下载 chromedriver 和 IEDriverServer 时,都没有对应的 win64 版本,只能选择 win32,也一样可以: 2. 下载的 IEDriverServer 的版本号和S ...

  3. 7.Python网络编程_多线程共享全局变量问题

    Python多线程支持全局变量的共享操作,但是它存在很多问题,先来看以下程序,该程序理论上执行完毕后全局变量g_num的值应该是2000000,但是在实际运行中,结果不足理论值 import thre ...

  4. luoguP2486 [SDOI2011]染色

    题目 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段) ...

  5. Python socket & socket server

    socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(套接字). 建立网络通信连接至少要一对socket.socket是对TCP/IP的封装 使用方法 ...

  6. layui实现分页

    一 准备工作 首先必须先引入layui的完整目录,也就是你下载下来的整个layui的目录都要放在你的资源文件夹下,也就是这个文件目录 刚开始接触layui的时候,以为和jquery,vue等框架一样, ...

  7. mysql group by 的用法解析

    1. group by的常规用法 group by的常规用法是配合聚合函数,利用分组信息进行统计,常见的是配合max等聚合函数筛选数据后分析,以及配合having进行筛选后过滤. 聚合函数max se ...

  8. 『卧槽』意外发现了 Hashtable 的 foreach 用法 BUG

    这段时间,公司项目中 遇到一个问题,最后查出: 是 Hashtable 的用法导致的. private static void AutoCleanCache() { try { lock (m_Has ...

  9. (三十三)golang--面向对象之继承

    继承可以解决代码复用: 实现:只需要在结构体中嵌套一个匿名结构体: 结构体可以使用匿名结构体中所有字段核方法:无论是大写还是小写: 可以简化访问匿名结构体中的属性和方法: 当该结构体和匿名结构体有相同 ...

  10. 一个简单的 WPF 程序,用于显示实时时间

    直接贴代码了: TimeShowerWindow.xaml <Window x:Class="HelloWorld.TimeShowerWindow" xmlns=" ...