前面把线程相关的生命周期、关键字、线程池(ThreadPool)、ThreadLocal、CAS、锁和AQS都讲完了,现在就剩下怎么来用多线程了。而要想用好多线程,其实是可以取一些巧的,比如JUC(好多面试官喜欢问的JUC,就是现在要讲的JUC)。JUC就是java.util.concurrent的
一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建
Mutex(互斥锁) Mutex是一个不可重入的互斥锁实现。锁资源(AQS里的state)只有两种状态:0表示未锁定,1表示锁定。下边是Mutex的核心源码: class Mutex implements Lock, java.io.Serializable { // 自定义同步器 private
Netty介绍和应用场景 要求 已经掌握了 主要技术构成: Java OOP 编程、 Java 多线程编程、 Java IO 编程 、 Java 网络编程、 常用的Java 设计模式(比如 观察者模式 ,命令模式,职责链模式 )、 常用的数据结构(比如 链表) Netty的介绍 1、Netty 是由
Java BIO 编程 一、I/O 模型 1、I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 2、Java 共支持 3 种网络编程模型/IO 模式:BIO、NIO、AIO 3、Java BIO : 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个
一、原生 NIO 存在的问题 1、NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。2、需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor
Netty 核心模块组件 一、Bootstrap、ServerBootstrap 1、Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件Netty中 Bootstrap 类是客户端程序的启动引导类 Serve
1、获取URL?后的参数(不区分请求方式) // 获取请求url ? 后的参数(url:8080/add?name=kelvin) func GetUrlParam(ctx *gin.Context) { name := ctx.Query("name") defaultName := ctx.De
响应 1. 字符串方式 r.GET("/user/save", func(ctx *gin.Context) { ctx.String(http.StatusOK, "this is a %s", "ms string response") }) 2. JSON方式 r.GET("/user/sav
中间件 在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个中间件执行。 中间件的常见应用场景如下: 请求限速 api接口签名处理 权限校验 统一错误处理 Gi
# vue基础用法&基础原理整理 1. vue基础知识和原理 1.1 初识Vue 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 demo容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法 demo容器里的代码被称为【Vue模板】 Vue实例和容器是一一对应的
核心原理&源码 Diff 算法 这里参考大佬文章:https://mp.weixin.qq.com/s/oAlVmZ4Hbt2VhOwFEkNEhw diff 算法的进化 关于 diff 算法的最经典的就是 Matt Esch 的 virtual-dom,以及 snabbdom(被整合进 vue 2
一、简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王) github.com/vuejs/vue-n… 1.性能的提升 打包大小减少41% 初次渲染快55%, 更新渲染快133% 内存减少54% 2.源码的升级 使用Proxy代替defineProperty实
import "strconv" //先导入strconv包 // string到int int, err := strconv.Atoi(string) // string到int64 int64, err := strconv.ParseInt(string, 10, 64) // int到st
笔记 脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放
打开我们的项目,此时项目中是没有 .git 文件的 在你的项目文件夹里面【鼠标右击】弹出菜单 在【鼠标右击】弹出的菜单中,点击【Git Bash Here】 在命令窗口中输入:git init 在 Gitee 中 我们刚刚新建的仓库里,去复制仓库的地址 在命令窗口中输入:git remote add
mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
1、引入pom坐标 io.springfox springfox-swagger2 3.0.0
一、将linux的jdk安装包上传到linux系统中 二、解压后放到安装路径下 tar -zxvf jdk-8u121-linux-x64.tar 三、配置JDK环境变量 1、vim /etc/profile 2、按 i 进入编辑状态 3、添加环境变量 #java environment expor
一、集群搭建 1、每台服务器上部署zookeeper 1、将zookeeper压缩包解压到指定位置,在zookeeper解压后目录下创建数据目录zkData 2、在zkData下创建myid文件,内容写上数字,代表该zookeeper的唯一id 3、修改conf目录下的zoo_sample.cfg为