面试java大厂必备面试题

面试java大厂必备面试题一 索引 优点 1 能够提高数据检索的效率 降低数据库的 IO 成本 2 能够降低数据的排序成本 每个索引中的数据都是按照索引键键值对进行排序的 如果排序字段和索引字段一直 分组也是需要先排序的 排序分组操作需要消耗内存和 CPU 用好了索引可以

大家好,欢迎来到IT知识分享网。

一、索引

优点:1能够提高数据检索的效率,降低数据库的IO成本

2、能够降低数据的排序成本,每个索引中的数据都是按照索引键键值对进行排序的,如果排序字段和索引字段一直,分组也是需要先排序的,排序分组操作需要消耗内存和CPU,用好了索引可以极大降低CPU资源的消耗

弊端:1、索引是独立于基础数据外的一部分数据,更新含有索引的列的时候,同时也会调整更新导致的索引信息,增加了更新所带来的IO量和调整索引所致的计算量

2、当包含的索引数据量大的时候,索引需要占用的空间也会随之增大,索引还会带来存储空间资源消耗的增加

建议:1. 较频繁的作为查询条件的字段应该创建索引

2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

3. 更新非常频繁的字段不适合创建索引

4. 不会出现在 WHERE 子句中的字段不该创建索引

二、Runnable和Thread的区别

1、Runnable的实现方式是实现其接口即可

2、Thread的实现方式是继承其类

3、Runnable接口支持多继承,但基本上用不到

4、Thread实现了Runnable接口并进行了扩展,而Thread和Runnable的实质是实现的关系,不是同类东西,所以Runnable或Thread本身没有可比性。

5、Runnable是可以共享数据的,多个Thread可以同时加载一个Runnable,当各自Thread获得CPU时间片的时候开始运行runnable,runnable里面的资源是被共享的

线程Thread的5状态

1创建:执行new方法创建对象,即进入创建状态

2就绪:创建对象后,执行start方法,即被加入线程队列中等待获取CPU资源,这个时候即为就绪状态

3运行:CPU腾出时间片,该thread获取了CPU资源开始运行run方法中的代码,即进入了运行状态

4阻塞:如果在run方法中执行了sleep方法,或者调用了thread的wait/join方法,即意味着放弃CPU资源而进入阻塞状态,但是还没有运行完毕,带重新获取CPU资源后,重新进入就绪状态

5停止:一般停止线程有两种方式:1执行完毕run方法,2调用stop方法,后者不推荐使用。可以在run方法中循环检查某个public变量,当想要停止该线程时候,通过thread.para为false即可以将run提前运行完毕,即进入了停止状态

线程分类

a. 用户线程,比如主线程,连接网络的线程

b. 守护线程,运行在后台,为用户线程服务 Thread.setDeamon,必须在start方法前调用。守护线程里面不能做一写IO读写的操作。因为当用户线程都结束后,守护线程也会随jvm一起被销毁,如果这个时候守护线程里面还有IO未完成的操作,就会崩溃

. final 在 java 中有什么作用?

  • final 修饰的类叫最终类,该类不能被继承。
  • final 修饰的方法不能被重写。可以被重载
  • final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

8. String str=”i”与 String str=new String(“i”)一样吗?

不一样,因为内存的分配方式不一样。String str=”i”的方式,java 虚拟机会将其分配到常量池中;而 String str=new String(“i”) 则会被分到堆内存中。

String 类的常用方法都有那些?

  • indexOf():返回指定字符的索引。
  • charAt():返回指定索引处的字符。
  • replace():字符串替换。
  • trim():去除字符串两端空白。
  • split():分割字符串,返回一个分割后的字符串数组。
  • getBytes():返回字符串的 byte 类型数组。
  • length():返回字符串长度。
  • toLowerCase():将字符串转成小写字母。
  • toUpperCase():将字符串转成大写字符。
  • substring():截取字符串。
  • equals():字符串比较。

哈希冲突

哈希是通过对数据进行再压缩,提高效率的一种解决方法。但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的值。这时候就产生了哈希冲突。

1.开放地址方法

(1)线性探测

   按顺序决定值时,如果某数据的值已经存在,则在原来值的基础上往后加一个单位,直至不发生哈希冲突。 

  (2)再平方探测

   按顺序决定值时,如果某数据的值已经存在,则在原来值的基础上先加1的平方个单位,若仍然存在则减1的平方个单位。随之是2的平方,3的平方等等。直至不发生哈希冲突。

  (3)伪随机探测

   按顺序决定值时,如果某数据已经存在,通过随机函数随机生成一个数,在原来值的基础上加上随机数,直至不发生哈希冲突。

2.链式地址法(HashMap的哈希冲突解决方法)

  对于相同的值,使用链表进行连接。使用数组存储每一个链表。

  优点:

  (1)拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;

  (2)由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;

  (3)开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间;

  (4)在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。  缺点:

  指针占用较大空间时,会造成空间浪费,若空间用于增大散列表规模进而提高开放地址法的效率。

3.建立公共溢出区

  建立公共溢出区存储所有哈希冲突的数据。

4.再哈希法

  对于冲突的哈希值再次进行哈希处理,直至没有哈希冲突。

1、三个重要的log文件,undolog binlog redolog

A库执行更改语句的时候写入binlog,B库有个io线程会去主库读binlog写到redolog中,B库还有个线程去执行redolog文件

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/91809.html

(0)
上一篇 2024-10-21 07:26
下一篇 2024-10-21 12:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信