我的面试宝典:一线互联网大厂Java核心面试题库
以下是我个人的一些做法,希望可以给各位提供一些帮助:
整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!
283页的Java进阶核心pdf文档
Java部分:Java基础,集合,并发,多线程,JVM,设计模式
数据结构算法:Java算法,数据结构
开源框架部分:Spring,MyBatis,MVC,netty,tomcat
分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
还有源码相关的阅读学习
、<、>=、<=、==、!=
用于表示两个值的关系
System.out.println(1!=2); 返回值只有boolean类型即true、false两种情况,在面向对象的时候会有其他情况出现。
四、逻辑运算符
&&、||、!
逻辑运算符的两边一般是表达式,而不是具体的值
例如:
&&:且
System.out.println(3>5 && 3<4); FALSE 左边只要是错误直接跳出
System.out.println(3>5 & 3<4); FALSE 两边都会参与运算
|| :或
System.out.println(3>5 || 3<4); TRUE 左边不正确才,会进行右边运算
System.out.println(3>5 | 3<4); TRUE 两边都会参与运算
!:取反
System.out.println(!(3>5 || 3<4));FALSE
五、位运算符:只能操作数值,操作的时候会转化成二进制进行运算
System.out.println(4 & 5); 值为4 例如 4是 100 5是101
都为1才为1 所以运算结果是
100 =1_22+0*21+0_2^0=4
System.out.println(4 | 5); 值为 5
100 101 有一个1就为1 ,所以二进制数表示为101所以值是5
System.out.println(4 ^ 5); 值为1
100 101 位数为10或01才计数 所以二进制数表示为001,所以值为1
System.out.println(~4) 值为-5
4的二进制位是:
0000 0000 0000 0000 0000 0000 0000 0100 =2^(3-1)=4(10)
按位取反:
1111 1111 1111 1111 1111 1111 1111 1011 =
-231+230…0*22+21+1=-5
我们很容易推导出来2^31=后面所有值+1
例如 1111 2(4-1)=2(3-1)+2(2-1)+2(1-1)+1=4+2+1+1=8
所以说4按位取反后相比取 后的值是差了 2^(3-1)+1=5 所以最后值是-5
最后形成一个这样的公式即使x+X+1=0其中X是x按位取反后的值例如:
1011=-8+2+1=-5
0100=4
4+(-5)+1=0
计算机程序对正数和负数都要进行计算,所以需要一种方法来区分正数和负数。显而易见的解决方案
是增加一个独立的符号位,这种表示方法称为符号和幅值表示法。
但是该种方法有很多去电,符号位放在那里?是放在左边还是放在右边,其次是运算的时候不能提前知道运算结果是正的还是负的,而且对于该种方法的计算,在计算的时候还需要额外的一步来设置符号,最后一个单独的符号位意味着在该种表示方法中还可能存在正0和负0,所以最后这种方法被摒弃了。
正菜:
在研究更具吸引力的替代方案时产生了这样一个问题,当我们试图用一个较小的数减去一个较大的数的时候,无无符号数表示方法的结果将会是什么?答案是较小的数字将会从前面的0中借位,所有的结果中前面的位都变成了一串1。
在没有其他更明显的更好选择的情况下,最终的解决方案是选择一种易于硬件实现的表达方式:
前导位为0表示正数,前导位为1表示负数。这种常用的表示有符号二进制数的方法称为二进制补码:
这种二进制补码虽然说会给粗心的程序猿带来烦恼,但相比符号和幅值方法,该方法不会对程序猿和
硬件造成困扰。因此现在所有的计算机都采用的是二进制补码方法来表示有符号数。
例如:
0000 0000 0000 0000 0000 0000 0000 0000 =0(10)
0000 0000 0000 0000 0000 0000 0000 0001 =1(10)
0000 0000 0000 0000 0000 0000 0000 0010 =2(10)
…
0111 1111 1111 1111 1111 1111 1111 1101 =2,147,483,645(10)
0111 1111 1111 1111 1111 1111 1111 1110 =2,147,483,646(10)
0111 1111 1111 1111 1111 1111 1111 1111 =2,147,483,647(10)
1000 0000 0000 0000 0000 0000 0000 0000 =-2,147,483,648(10)
1000 0000 0000 0000 0000 0000 0000 0001=-2,147,483,647(10)
1000 0000 0000 0000 0000 0000 0000 0010 =-2,147,483,646(10)
…
1111 1111 1111 1111 1111 1111 1111 1101 =-3(10)
1111 1111 1111 1111 1111 1111 1111 1110 =-2(10)
1111 1111 1111 1111 1111 1111 1111 1111 =-1(10)
移位操作:
例如
System.out.println(2<<3); 010左移三位后变成 10000 2^4=16=2*(2_2_2)
左移3位乘以3次2
右移3位除以3次2
六、条件运算符或者叫三目运算符:
System.out.println(true?false:true?false:true);结果显而易见是true
使用的时候需要跟一个表达式,表达式如果是true,则返回?后的结果,false则返回:后面的结果
总结
在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。
82l-1714919307771)]