四种!
第一种继承Thread类 重写run方法 因为Java是单继承我们通常会采用第二种方法。想要用的话就new一个Thread对象调用start方法
第二种方式是实现Runnable接口 同样实现的run方法 想要用的话就new一个Thread对象调用start方法。
第三种:实现Callable接口 与第二种方法的区别是 开启一个线程 我们是可以拿到任务的结果的。
要使用Callable的话要结合FutureTask
我们需要将当前类对象传给FutureTask,将FutureTask对象传给Thread
第四种方式:利用线程池创建线程。实现Callable接口orRunnable接口,由ExecutorService来创建线程。
以上几种方式底层都是实现Runable接口
java有哪些集合类型?
java的集合类型主要有3种:set(集)、list(列表)和map(映射)。
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
1)对于==,比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
详情:
https://baike.baidu.com/item/%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/1441391?fr=aladdin
1>、物理层
建立、维护、断开物理连接。(由底层网络定义协议)
2>、数据链路层
建立逻辑连接、进行硬件地址寻址、差错校验 [3] 等功能。(由底层网络定义协议)
将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
3>、网络层
进行逻辑地址寻址,实现不同网络之间的路径选择。
协议有:ICMP IGMP IP(IPV4 IPV6)
4>、传输层
定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
5>、会话层
建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
对应主机进程,指本地主机与远程主机正在进行的会话
6>、表示层
数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
格式有,JPEG、ASCll、EBCDIC、加密格式等
7>、应用层
网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
1、区别:加密一般分为两种,对称加密和非对称加密。对称加密就是加密解密都用同一个秘钥,比如DES、3DES(TripleDES)和AES等。
非对称加密就是加密和解密不是用的同一种秘钥,比如RSA算法、DSA算法、ECC算法、DH算法等。
在非对称加密中,用来加密的秘钥叫公钥,用来解密的秘钥叫私钥。公钥和私钥都是成对生成的,公钥分发给其他人用来加密,私钥用来解密。
2、优缺点:
对称加密:解密速度快,但保密性差。
非对称加密:加密算法保密性好,它消除了最终用户交换密钥的需要。但是加解密速度要远远低于对称加密。
冒泡排序、选择排序、归并排序、堆排序、快速排序、
希尔排序、插入排序、基数排序、桶排序、计数排序。
十大排序详解
static
final
ThreadLocal
AtomicInteger
volatile
synchronized
Http与Https的区别:
1、https协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(原来网易官网是http,而网易邮箱是https。)
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
原文链接:https://blog.csdn.net/qq_38289815/java/article/details/80969419
get和post都是http请求方式。 它们的区别如下:
区别一,get请求重点在从服务器上获取资源,而post请求重点在向服务器发送数据。
区别二,get传输数据是通过URL请求,以字段=value的形式,用?连接置于URL之后,多个请求数据之间用&连接,这个过程用户可见,因此是不安全的。
post传输数据是通过http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程用户不可见,因此是安全的。
区别三,get传输的数据量小,受URL长度的限制,但是效率高。
post传输数据量不受限制,可以传输大量数据,所以传输文件时只能使用post,但是效率较低。请求较多时可能形成一个请求队列。
区别四,get方式只支持ASCII字符,因此向服务器传输中文有可能出现乱码。
post支持标准字符集,可以正确传递中文字符。
原文链接:https://www.cnblogs.com/jasonboren/p/11053889.html
几篇文章供参考:
文章一: https://www.cnblogs.com/gslgb/p/14724879.html
文章二:https://blog.csdn.net/weixin_47994845/article/details/126899448
文章三:https://blog.csdn.net/l688899886/article/details/126726498
是!
一个源文件中可以声明多个类,但是最多只能有一个类使用public进行声明。
且要求声明为public的类的类名与源文件名相同。
dir 、 cd 、md、rd、cls
存在!
不能举例。
因为在字节码文件运行阶段时 可能时解释器执行,也有可能时JIT(即时编译器)编译器执行。
也是因为JIT使Java的运行效率更高。
使用 <<
略
8种基本数据类型。(略)
String不是,属于引用数据类型。
类似问题:
> Java的基础数据类型有哪些?String是吗?(贝壳)
略
不能使用float或double,因为精度不高。
使用BigDecimal类替换,可以实现任意精度的数据的运算。
可以的。char c1 = ‘中’;
char c2 = ‘a’。
因为char使用的是unicode字符集,包含了世界范围的所有的字符。
short s1=1;
s1=s1+1; //有什么错? =右边是int类型。需要强转
short s1=1;
s1+=1; //有什么错? 没错
0。
String s1 = "abc";
String s2 = "123";
String temp = s1;
s1 = s2;
s2 = temp;
编译时不谈占几个字节。
但是JVM在给boolean类型分配内存空间时,boolean类型的变量占据一个槽位(slot,等于4个字节)。
细节:true:1 false:0
>拓展:在内存中,byte\short\char\boolean\int\float : 占用1个slot
double\long :占用2个slot
在代码中测试0.1 + 0.2,你会惊讶的发现,结果不是0.3,而是0.3000……4。这是为什么?
几乎所有现代的编程语言都会遇到上述问题,包括 JavaScript、Ruby、Python、Swift 和 Go 等。引发这个问题的原因是,它们都采用了IEEE 754标准
。
IEEE是指“电气与电子工程师协会”,其在1985年发布了一个IEEE 754计算标准,根据这个标准,小数的二进制表达能够有最大的精度上限提升。但无论如何,物理边界是突破不了的,它仍然
不能实现“每一个十进制小数,都对应一个二进制小数”
。正因如此,产生了0.1 + 0.2不等于0.3的问题。
具体的:
整数变为二进制,能够做到“每个十进制整数都有对应的二进制数”,比如数字3,二进制就是11;再比如,数字43就是二进制101011,这个毫无争议。
对于小数,并不能做到“每个小数都有对应的二进制数字”。举例来说,二进制小数0.0001表示十进制数0.0625 (至于它是如何计算的,不用深究);二进制小数0.0010表示十进制数0.125;二进制小数0.0011表示十进制数0.1875。看,对于四位的二进制小数,二进制小数虽然是连贯的,但是十进制小数却不是连贯的。比如,你无法用四位二进制小数的形式表示0.125 ~ 0.1875之间的十进制小数。
所以在编程中,遇见小数判断相等情况,比如开发银行、交易等系统,可以采用四舍五入
或者“同乘同除
”等方式进行验证,避免上述问题。
public class InterviewTest {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arr); // 地址值
char[] arr1 = {'a','b','c','d'};
System.out.println(arr1); // abcd
boolean[] arr2 = {false, true, false};
System.out.println(arr2); // 地址
}
}
public static void main(String[] args) {
int i = 1;
i = i++;
int j = i++;
int k = i + ++i * i++;
System.out.println("i="+i);
System.out.println("j="+j);
System.out.println("k="+k);
}
i=4
j=1
k=11
题目:
public class InterviewTest {
public static void main(String[] args) {
int a = 10;
int b = 20;
method(a, b); // 需要在method方法被调用之后,仅打印出a=100,b=200,请写出method方法的代码
System.out.println("a="+a);
System.out.println("b="+b);
}
// 代码编写处
}
答案:
//method
// 方法一:System.exit(0); // 退出程序
public static void method(int a, int b) {
a *= 10;
b *= 10;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.exit(0); // 退出程序
}
// 方法二 重写println方法
public static void method2(int a, int b) {
PrintStream ps = new PrintStream(System.out) {
@Override
public void println(String x) {
if ("a=10".equals(x)) {
x = "a=100";
}else if("b=20".equals(x)){
x = "b=200";
}
super.println(x);
}
};
System.setOut(ps);
}
// 错误的做法
public static void method3(int a, int b){
a*=10;
b*=10;
}