Java并发
并发编程基础什么是共享资源堆是被所有线程共享的一块区域,在虚拟机启动时创建。此区域的唯一目的就是存放对象实例,Java中几乎所有的对象实例都在这里分配内存。
方法区与堆区一样,也是每个线程共享的一块内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
栈中数据是私有的,是线程隔离的。
难点
原子性问题
操作系统做任务切换,可以发生在任何一条CPU指令执行完成之后。
CPU能保证的原子操作是指令级别的,而不是高级语言的操作符。
可见性问题
可见性是指一个线程对共享变量的修改,另外一个线程能够立刻看到。
可见性问题是由CPU的缓存导致的,多核CPU均有各自的缓存,这些缓存均要与内存同步。
有序性
在执行程序时,为了提高性能,编译器和处理器常常会对指令进行重排序。
重排序不会影响单线程的执行结果,但在并发的情况下,可能会出现诡异的bug。Java Memory Model
并发编程的关键目标
并发编程需要解决两个问题:线程之间如何通信和同步
通信:线程之间以何种机制交换信息
同步:程序中用于控制不同线程之间的操作发生的相 ...
计网
计网基础TCP/IP模型
应用层最上层的,也是我们能直接接触到的就是应用层(Application Layer),我们电脑或手机使用的应用软件都是在应用层实现。
应用层只需要专注于为用户提供应用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等。
传输层应用层的数据包会传给传输层,传输层(Transport Layer)是为应用层提供网络支持的。
在传输层会有两个传输协议,分别是 TCP 和 UDP。
TCP的全称叫传输控制协议(Transmission Control Protocol),TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。UDP只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高。DP 也可以实现可靠传输,把 TCP 的特性在应用层上实现就可以。当传输层的数据包大小超过 MSS(TCP 最大报文段长度) ,就要将数据包分块,这样即使中途有一个分块丢失或损坏了,只需要重新发送这一个分块,而不用重新发送整个数据包。在 TCP 协议中,我们把每个分块称为一个 TCP 段 ...
Mysql笔记
MysqlSQL——操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准
关系型数据库——建立在关系模型上,由多张相互连接的二维表组成的数据库;
特点:1.使用表存储数据,格式统一,便于维护
2.使用sql语言操作,标准统一,使用方便
数据模型——数据库+表
SQLSQL通用语法1.SQL语句可以单行或多行书写,以分号结尾;
2.SQL语句可以使用空格/缩进来增强语句的可读性;
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写;
4.注释:
· 单行注释:—注释内容或# 注释内容(MySQL特有)
·多行注释:/注释内容 /
DDL数据定义语言,用来定义数据库对象(数据库,表,字段)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546# 查询数据库 # 查询所有数据库 SHOW DATABASES; # 查询当前的数据库 SELECT DATABASE();# 创建数据库 字符集推荐(utf8mb4 ...
WebSocket笔记
WebSocket简介Http协议有缺陷,通信只能由客户端发起,做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用轮询:每隔一段时候,就发出一个询问,了解服务器有没有新的信息。轮询客户端在固定的时间间隔下不停地向服务端发送请求,查看服务端是否有新的数据,若服务端有新的数据,则返回给客户端,若是服务端没有新的数据,则返回一个空的JSON或者XML文档,轮询对于开发者来说实现方便,但弊端明显:客户端每次都要建立新的HTTP请求,服务端要处理大量的无效请求,在高并发的情景下会严重拖慢服务端的运行效率,同时服务端的资源被极大地浪费了。的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。
WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。其他特点:
建 ...
夜月集
闲暇时间写的小诗第一首在高中,一个舒服的午睡中,做了个梦,然后就自然而然地写出了下面的这首~
无题昼阳斜风细雨映琉璃,茉莉香缕小径西。桥畔绮琴轻蝶舞,梨窝浅笑百莺啼。
Spring基础
Spring基础Spring系统架构
Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基。
Spring Framework的发展也经历了很多版本的变更,每个版本都有相应的调整
Spring Framework 4的版本的系统结构图
(1)核心层
Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块
(2)AOP层
AOP:面向切面编程,它依赖核心层容器,目的是==在不改变原有代码的前提下对其进行功能增强==
Aspects:AOP是思想,Aspects是对AOP思想的具体实现
(3)数据层
Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术
Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis
Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现,也是后期学习的重点内容
(4)Web层
SpringMVC
(5)Test层
Spring主要整合了Junit来完成单 ...
SpringBoot整合Redis
SpringBoot整合Redis1.现在pom.xml中导入Redis项目依赖12345<!-- redis --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>
2.配置application配置文件12345678910111213141516171819spring: redis: database: 0 # Redis服务器Ip地址 host: port: 6379 # 密码 默认为空 password: jedis: pool: max-active: 200 # 连接池最大阻塞等待时间(使用负值表示没有限制) 表示连接池的链接拿完了 现在去申请需要等待的时间 max-wa ...
Java基础
Java学习!第一天Hello World12345678910// 第一行的第三个单词必和文件名一样// public class 后面代表定义一个类的名称 类是Java当中所有源码的基本组织单位。public class Main { //第二行代表main方法 //执行程序的起点 public static void main(String[] args) { //输入输出语句 System.out.println("hello world"); }}
基本数据类型整数型 byte short int long
浮点型 float double
字符型 char
布尔型 boolean
P.S float的数据范围比long大
自动类型转换:可以从小到大转(数据范围)
强制类型转换:可以大到小,也可以小到大;(一般不推荐使用,可能会发生数据精度缺失)
byte /shot/char运算时首先提升为int型;
123456789101112public class ...