Netty 进阶1. 粘包与半包1. 粘包现象服务端代码
12345678910111213141516171819202122232425262728293031323334353637383940414243444546public class HelloWorldServer { static final Logger log = LoggerFactory.getLogger(HelloWorldServer.class); void start() { NioEventLoopGroup boss = new NioEventLoopGroup(1); NioEventLoopGroup worker = new NioEventLoopGroup(); try { ServerBootstrap serverBootstrap = new ServerBootstrap(); serverBootstrap.channel(NioServerSoc ...
JDK8 新特性jdk8 新特性简介
速度更快
代码更少(增加了新的语法 Lambda 表达式)
强大的 Stream API
便于并行 最大化减少空指针异常 Optional
jvm 的一些调整
1. Lambda 表达式1. 概念Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使 Java的语言表达能力得到了提升。
口诀:
上联:左右遇一括号省
下联:左侧推断类型省
横批:能省则省
2. Lambda 表达式语法Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:
**左侧:**指定了 Lambda 表达式需要的所有参数
**右侧:**指定了 Lambda 体,即 Lambda 表达式要执行 的功能。
1、语法格式一:无参,无返回值,Lambda 体只需一条语句
1Runnable r = () -> Sy ...
JVM和Java体系架构1. jvm前言你是否也遇到过这些问题?
作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?
运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!
想解决线上JVM GC问题,但却无从下手。
新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就GG了。
每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。
2. 开发人员如何看待上层框架
大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。
一些有一定工作经验的开发人员,打心眼儿里觉得SSM、微服务等上层技术才是重点,基础技术并不重要,这其实是一种本末倒置的“病态”。
如果我们把核心类库的API比做数学公式的话,那么Java虚拟机的知识就好比公式的推导过程。
计算机系统体系对我们来说越来越远,在不了解底层实现方式的前提下,通过高级语言很容易编写程序代码。但事实上计算机并不认识高级语言。
3. 架构师每天都在思考什 ...
对象的实例化内存布局与访问定位1. 对象的实例化
大厂面试题
美团:
对象在JVM中是怎么存储的?
对象头信息里面有哪些东西?
蚂蚁金服:
二面:java对象头里有什么
1. 对象创建的方式
new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法
Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 public
Constructor的newInstance(Xxxx):反射的方式,可以调用空参的,或者带参的构造器
使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中的clone方法
使用序列化:从文件中,从网络中获取一个对象的二进制流,序列化一般用于Socket的网络传输
第三方库 Objenesis
2. 对象创建的步骤
从字节码看待对象的创建过程
12345public class Test { public static void main(String[] args) { Object ob ...
执行引擎1. 执行引擎概述
1. 执行引擎概述
执行引擎是Java虚拟机核心的组成部分之一。
“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。
JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。
那么,如果想要让一个Java程序运行起来,执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令才可以。简单来说,JVM中的执行引擎充当了将高级语言翻译为机器语言的译者。
1、前端编译:从Java程序员-字节码文件的这个过程叫前端编译
2、执行引擎这里有两种行为:一种是解释执行,一种是编译执行(这里的是后端编译)。
2. 执行引擎工作过程
执行引擎工作 ...
MySQL环境搭建1. MySQL的卸载1. 停止MySQL服务在卸载之前,先停止MySQL8.0的服务。按键盘上的“Ctrl + Alt +Delete”组合键,打开“任务管理器”对话框,可以在“服务”列表找到“MySQL8.0”的服务,如果现在“正在运行”状态,可以右键单击服务,选择“停止”选项停止MySQL8.0的服务,如图所示。
2. 软件的卸载方式1:通过控制面板方式
卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在“控制面板”选择“卸载程序”,并在程序列表中找到MySQL8.0服务器程序,直接双击卸载即可,如图所示。这种方式删除,数据目录下的数据不会跟着删除。
方式2:通过360或电脑管家等软件卸载
略
方式3:通过安装包提供的卸载功能卸载
你也可以通过安装向导程序进行MySQL8.0服务器程序的卸载。
①再次双击下载的mysql-installer-community-8.0.26.0.msi文件,打开安装向导。安装向导会自动检测已安装的MySQL服务器程序。
② 选择要卸载的MySQL服务器程序,单击“Remove”(移除),即可进行卸载。
③ 单击“N ...
运算符1. 算术运算符算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加(+)、减(-)、乘(*)、除(/)和取模(%)运算。
1.加法与减法运算符
1234567mysql> SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5 FROM dual;+-----+---------+---------+----------+--------------+------------+------------+| 100 | 100 + 0 | 100 - 0 | 100 + 50 | 100 + 50 -30 | 100 + 35.5 | 100 - 35.5 |+-----+---------+---------+----------+--------------+------------+------------+| 100 | 100 | 100 | 150 | 120 | ...
排序与分页1. 排序数据1. 排序规则
使用 ORDER BY 子句排序
ASC(ascend): 升序
DESC(descend):降序
ORDER BY 子句在SELECT语句的结尾。
2. 单列排序123SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date ;
123SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date DESC ;
123SELECT employee_id, last_name, salary*12 annsalFROM employeesORDER BY annsal;
3. 多列排序123SELECT last_name, department_id, salaryFROM employeesORDER BY department_id, salary DESC;
可以使用不在SELECT列表中的列排序。
在 ...
多表查询多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。
前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。比如:员工表和部门表,这两个表依靠“部门编号”进行关联。
1. 一个案例引发的多表连接1. 案例说明
从多个表中获取数据:
123#案例:查询员工的姓名及其部门名称SELECT last_name, department_nameFROM employees, departments;
查询结果:
12345678910111213141516171819202122232425+-----------+----------------------+| last_name | department_name |+-----------+----------------------+| King | Administration || King | Marketing || King | Purchasing || King | Human Resources || King | ...
聚合函数我们上一章讲到了 SQL 单行函数。实际上 SQL 函数还有一类,叫做聚合(或聚集、分组)函数,它是对一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值。
1. 聚合函数介绍
什么是聚合函数
聚合函数作用于一组数据,并对一组数据返回一个值。
聚合函数类型
AVG()
SUM()
MAX()
MIN()
COUNT()
聚合函数语法
聚合函数不能嵌套调用。比如不能出现类似“AVG(SUM(字段名称))”形式的调用。
1. AVG和SUM函数可以对数值型数据使用AVG 和 SUM 函数。
123SELECT AVG(salary), MAX(salary),MIN(salary), SUM(salary)FROM employeesWHERE job_id LIKE '%REP%';
2. MIN和MAX函数可以对任意数据类型的数据使用 MIN 和 MAX 函数。
12SELECT MIN(hire_date), MAX(hire_date)FROM employees;
3. COUNT函数COUNT(*)返回表中记 ...

