java相关知识

StringBuffer 和 StringBuilder的区别

区别1:线程安全
StringBuffer:线程安全,StringBuilder:线程不安全。因为 StringBuffer 的所有公开方法都是 synchronized 修饰的,而 StringBuilder 并没有 synchronized 修饰。
区别2:性能
既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder 的性能要远大于 StringBuffer。
String声明的是不可变的对象,每次操作必然产生一个新的对象
StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder

集合线程中的问题

Collection是对象的集合,Collection有两个子接口List和Set。
List可以通过下标(1,2…)来取得值,值可以重复,而Set只能通过游标来取值,并且值是不能重复的
ArrayList,vector,LinkedList是List的实现类
ArrayList是线程不安全的,Vector是线程的安全的,这两个类底层都是由数组实现的
LinkedList是线程不安全的,底层是由链表实现的
Map是键值对集合
HashTable和HashMap是Map的实现类
HashTable是线程安全的,不能存储null值
HashMap不是线程安全的,可以存储null值

线程

线程具有声明周期,其中包含了7种状态:
1.出生状态:线程被创建时处于的状态,在用户使用该线程实例调用start()方法之前线程都处于出生状态
2.就绪状态:当用户调用start()方法后,线程处于就绪状态(又被称为可执行状态)
3.运行状态:当线程得到系统资源后就进入运行状态。
一旦线程进入到就绪状态,他会在就绪与运行状态下转换,同时也有可能进入等待,休眠,阻塞或死亡状态
4.等待状态:当处于运行状态下的线程调用Thread类中的wait()方法时,该线程便进入到等待状态;
进入等待状态的线程必须调用Thread类中的notify()方法才被唤醒,唤醒后进入到就绪状态;
而notifyAll()方法是将所有处于等待状态下的线程唤醒,唤醒后进入到就绪状态;
5.休眠状态:当线程调用Thread类中的sleep()方法时,则会进入休眠状态;
6.阻塞状态:如果一个线程在运行状态下发出输入/输出请求,该线程进入到阻塞状态;
在等待输入/输出结束时线程进入就绪状态,对于阻塞的线程来说,即使系统资源关闭,线程依然不能
回到运行状态;
7.死亡状态:当线程的run()方法执行完毕时,线程进入死亡状态;

虽然多线程看起来像同时执行,但事实上在同一时间点上只有一个线程被执行,只是线程之间的切换
较快,所以才会使人产生线程是同时执行进行的假象,在Windows系统中,系统会为每个线程分配一
小段CPU时间片,一旦CPU时间片结束就会将当前线程换为下一个线程,即使该线程没有结束。

使线程处于就绪状态有以下几种方法:
调用sleep()方法
调用wait()方法
等待输入/输出完成。
当线程处于就绪状态后,可以用以下几种方法使线程再次进入运行状态:
线程调用notify()方法。
线程调用notifyAll()方法;
线程调用中断interrupt()方法:
线程的休眠时间结束
输入/输出结束

Git

**从远程仓库克隆代码:**git clone 从仓库复制的地址

**查看日志文件:**git log

**查看工作目录当前状态:**git status

**增加文件到缓存区:**git add

**提交代码到本地仓库:**git commit -m ‘此处填写修改的信息’

**将代码提交到远程仓库:**git push

**从远程仓库拉取代码:**git pull

跨域

什么是跨域?

当一个页面请求的url的协议、域名、端口三者之间任何一者与当前页面url不同即为跨域。

案例:

当前页面url被请求页面url是否跨域** 原因**
http://www.test.com/http://www.test.com/index.html同源(协议、域名、端口号相同)
http://www.test.com/https://www.test.com/index.html跨域协议不同(http/https)
http://www.test.com/http://www.baidu.com/跨域主域名不同(test/baidu)
http://www.test.com/http://blog.test.com/跨域子域名不同(www/blog)
http://www.test.com:8080/http://www.test.com:7001/跨域端口号不同(8080/7001)

**解决办法:**在controller层加一个@CrossOrigin注解

网络

**局域网:**如宿舍在一起打游戏的网络

**广域网:**典型的因特网,想要在网络中通信是必须用到网络协议的

**协议分为:**TCP协议和UDP协议

**TCP协议:**需要创建连接请求,连接成功后发送数据(发送数据有一个验证的过程,效率低),可以反馈数据是否送达,比较可靠

TCP网路传输控制协议,TCP是面向连接的通信协议,即传输数据之前在发送端与接收端之间建立连接,然后再传输数据,再传输数据之前进行三次握手来建立连接:

**第一次握手:**客户端向服务器发出连接请求,等待服务器确认

**第二次握手:**服务器向客户端发送响应,通知客户端收到连接请求

**第三次握手:**客户端再次向服务器端确认请求

完成三次握手建立连接后,客户端与服务器端之间就可以进行数据传输了,TCP协议可以保证数据传输的安全性,比如日常生活中的下载文件

四次挥手:(终止协议)

第一次,客户端像服务端发送FIN结束报文段,准备关闭连接

第二次,服务端确认客户端的FIN,表示自己已经收到对方关闭连接的请求

中间这段时间,客户端停止向服务端发送数据,但是服务端可以向客户端发送数据,要将自己未处理完任务处理完

第三次,服务端向客户端发送FIN结束报文段,准备关闭连接

**第四次,**客户端确认服务端的FIN,进入TIME_WAIT状态,此时客户端进程已经退出,但是连接还在

**UDP协议:**不创建连接请求,直接发送数据(效率高,适合开发视频聊天等应用)

无任何反馈,数据传输上来说不可靠,他可以同时发送多条消息,但是不知道对方是否收到了,也可以接收多条消息

**端口:**网络服务请求不同的端口

如果HTTP服务就请求80端口,HTTPS服务就请求443端口,FTP就请求21端口,Tomcat请求8080端口,mysql请求3306端口

电脑里的端口有0–65535个,通常0–1023之间的端口数用于一些知名的网络服务和应用,写程序的端口应该在1024端口以上,也就是用于普通网络程序

套接字:(socket)提供给程序可以对外进行连接的接口

**IP:**格式192.168.0.1 它是32位无符号的数字,他由四位数字组成,每组数字的取值范围都是0–255,他被成为(IPV4)

特殊的IP:本地回送地址:127.0.0.1 不会进行网络传输,立即返回本地

IP地址的四段数字:192.168.219.1

第一组:网络类型,第二组:网络范围,第三组:网络位,第四组:主机位

IP地址是由32位的二进制数字组成,每8位表示一个10进制数范围0–255,IP地址是由网络地址与主机地址两部分组成,网络地址可用来识别设备所在的网络,主机地址位于IP地址的后段,可用来识别网络上设备

1、http:// (应用层) TCP,UDP(传输层) IP(网络层)

http://www.baidu.com每一组都代表什么?

1、http://

代表超文本传输协议,通知microsoft.com服务器显示Web页,通常不用输入。

2、www.

代表万维网,是基于客户机/服务器方式的信息发现技术和超文本技术的综合。WWW服务器通过超文本标记语言(HTML)把信息组织成为图文并茂的超文本,利用链接从一个站点跳到另个站点。

3、baidu.

百度公司的外名名称。

4、com

通用域名格式,为commercial简称,表示表明由商业组织注册此域名的原始意图。

== 和 equals的区别

1.==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同

2.==是指对内存地址进行比较 , equals()是对字符串的内容进行比较

3.==指引用是否相同, equals()指的是值是否相同

java基本数据类型

java中的基本数据类型(八种)
一个字节等于八位
byte 占1字节 (-27–27-1) -128~127
boolean 占1字节 有两个值: true false
short 占2字节 (-215–215-1) -32768~32767
char 占2字节 只能存放一个字符
int 占4字节 (-231—231-1) -2147483648~2147483647
float 占4字节 定义一个单精度浮点类型,要在后面加上F 否则默认为双精度浮点类型
long 占8字节 (-263–263-1) -9223372036854775808~~9223372036854775807
double 占8字节 双精度浮点类型

ASCII常用字符:
‘0’-‘9’: 48 ~ 57
‘a’-‘z’: 97 ~ 122
‘A’-‘Z’: 65 ~ 90

集合中常见的问题

在这里插入图片描述

list接口

List接口允许其集合中的元素可以重复,并且也是有序的,通过索引来标识(第一个添加元素的索引值为0)

List中不能放基本数据类型的数据,数组中是可以的

常用的实现类ArrayList和LinkedList

ArrayList使用数组作为容器,因此如果需要删除元素,开销很大。但是适合查找元素

LinkedList使用双向链表作为容器,因此如果需要获取元素,开销很大。但是适合添加和删除

set接口

两者中的值都不能重复,就如数据库中的唯一约束。

1.TreeSet是二叉树实现的,TreeSet中的数据是自动排序好的,不允许放入null值。

要想指定集合的存放顺序,被排序的对象需实现Comparable接口。 ComparableTo的三个返回值:负数,正数,0

2.HashSet是哈希表实现的,HashSet中的数据是无序的,可以放入null值,但只能放入一个null。

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象, hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。

Map接口

1.Map根据键值对存放,键不可以重复,值是可以重复的。

2.HashMap的是随机存储的,TreeMap是根据键的升序排序

3.HashMap适合插入和删除,TreeMap适合自然排序

4.HashMap中通过get()来获取value,通过put来插入value

代码块的执行顺序

静态代码块

  • 在类中成员方法之外,用Static修饰代码区域可以称之为静态代码块

  • 静态代码块运行顺序:静态代码 > 非静态代码 > 构造方法 > 成员方法(成员方法只有在调用的时候才能运行)

  • 注意:java静态代码块在类加载时就执行,但是只执行一次

    `public class Static{`
    	`static {` 
    		`System.out.println("这里是静态代码块");`
    	`}`
    	`{`
    		`System.out.println("这里是非静态代码块");`
    	`}`
    	`public Static() {`
    		`System.out.println("这里是构造方法");`
    	`}`
    	`public void method(){`
    		`System.out.println("这里是成员方法");`
    	`}`
    	`public static void main(String[] args) {`
    		`Static ss = new Static();` 
    	`//	ss.method(); 成员方法只有在调用的时候才能运行`
    	`}`
    	}
    

面向对象的初始化过程

Student s = new Student(); 在内存中做了哪些事情呢?

1:加载Student.class文件

2:在栈内存为s开辟空间

3:在堆内存为学生对象开辟空间

4:对学生对象的成员变量进行默认初始化

5:对学生对象的成员变量进行显示初始化

6:通过构造方法对学生对象的成员变量赋值

7:学生对象初始化完毕,把对象地址赋值给s变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

menglc123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值