Java十个小知识

一丶 String 丶StringBuffer 丶 StringBuilder的区别 

1.String 是Final修饰的,线程安全   不可变 

2.StringBuffer的是线程安全   通过 synchronized 关键字 进行加锁实现线程安全     可变类 多线程

3.StringBuilder 不是线程安全   ,可变类    单线程操作字符串

三者都是final类,不允许被继承

二丶java基本类型 具体到字节位

byte 8位        short 16位      int 32位    long  64位

float 32位      double 64位     Boolean默认false    char 16位 

三丶JDK丶JVM丶JRE的区别 

JDK   

 Java 标准的开发包,提供了编译、运行 Java 程序所需要的各种工具 和资源 

JVM

 Java 虚拟机,是 JRE 的一部分。 它是整个 Java 实现跨平台的核心 

不同平台的 JVM 是不同的,但是他们都提供了相同的接口。 JVM 是 Java 程序跨平台的关键部分,只要为不同平台实现了相同的虚拟机,编译后的Java 字节码就可以在该平台上运行。

JRE

 Java 运行时环境,用于解释执行 Java 的字节码文件 

四丶常见的RunTime异常 

NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

五丶List和 Map丶 Set的区别

List 

// List有序可重复
ArrayList 底层是数组,查询快,增删慢,线程不安全,效率高,适合get和set方法;

LinkedList 底层是双向循环链表,查询慢,增删快,线程不安全,效率高,适合增加和删除方法

Set 

//Set 无序  不可重复
HashSet:(无序,唯一)底层是哈希表,通过 hashCode()和 equals()保证元素唯一;

LinkedHashSet:(有序,唯一)底层是链表和哈希表 ,链表保证元素的有序, 哈希表证元素的唯一性;

Map

/*
K-V结构、键唯一、值不唯一。
Map 集合中存储的是键值对,键不能重复,值可以重复。
根据键得到值,对 map 集合遍历时先得到键的 set 集合
,对 set 集合进行遍历,得到相应的值。
*/

HashMap :底层是哈希表,允许null 键和null值,线程不安全的,效率高(通过 hashCode()和equals()保证元素唯一);

HashTable :底层是哈希表,不允许null 键和null值,线程安全的,效率低,内部的方法基本都用synchronized修饰;

六丶线程有几个状态和如何转换状态

/*
  线程有五大状态
    创建状态、
    就绪状态、
    运行状态、
    阻塞状态、
    死亡状态
*/


//创建状态 : new 线程对象Thread t = new Thread();线程对象一旦创建,就是创建状态
//就绪状态 : new出后,当调用start()方法,线程就会立即进入就绪状态,但不意味着立即调度执行。
//运行状态 : 处于就绪状态的线程,经过CPU调度就会进入运行状态,线程才会真正执行线程体的代码块。
//阻塞状态 : 当调用sleep、wait或同步锁定时,线程进入阻塞状态,就是代码块不往下执行,阻塞事件解除 
             后,重新进入就绪状态,等待CPU调度执行。
//死亡状态 : 线程中断或结束,一旦进入死亡状态,就不能再次启动。

  //new 方法实现新建  start()方法实现就绪后进入运行状态  sleep()方法实现进入阻塞状态 
   yield()方法实现礼让(但不是进入了阻塞状态)这个是一个概率问题 ,不一定礼让成功
   join()方法实现 插队执行 

七丶MyISAM储存引擎和InnoDB 储存引擎的区别

   1.数据结构不同

   2.存储空间的消耗不同

   3.对事务的支持不同(MyISAM不支持事务)

   4.对锁的支持不同(只是大量的查询使用MyISAM会好些)

   5.对外键的支持不同(MyISAM不支持外键)

   注意:        

        1、如果需要支持事务,选择InnoDB,不需要事务则选择MyISAM。

        2、如果大部分表操作都是查询,选择MyISAM,有写又有读选InnoDB。

        3、如果系统崩溃导致数据难以恢复,且成本高,不要选择MyISAM。

八丶Mysql连接查询有哪些

 1.内连接

      找的是两个表里共有数据(即交集),关键字是inner join on,inner join连接两个表,on是连接字段

 2.外连接(左外连接,右外连接)

 左外连接

          left join on 左外连接是以左表为主,右表为辅,主表有的数据,辅表没有,则辅表用空补齐主表。

 右外连接

       right join on 右外连接是以右表为主,左表为辅,主表有的数据,辅表没有,则辅表用空补齐主表。

全外

      左外+union+右外 全外是互为主表

3.交叉连接

   关键字是:cross join。交叉连接是查看两个表的组合有多少个,完全匹配

内连接和外连接的区别

       1、内连接:

        假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的。

        2、外连接:

        假设A和B表进行连接,使用外连接的话, AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表。当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。

九丶SQL常用的五个聚合函数

AVG() :返回平均值
SUM() :返回总和值
MAX() :返回最大的值
MIN() :返回最小的值
COUNT():统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。
        COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。
        COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 

十丶创建线程的几种方式

(1)类继承Thread,覆盖重写run方法

(2)类实现Runnable类型的对象,实现run()方法,传入Thread的构造方法中

(3)类实现Callable接口,实现call()方法;

(4)通过Executor的工具类创建线程池,通过线程池获取线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值