Netty
NIO 基础non-blocking io 非阻塞 IO
三大组件Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层
常见的 Channel 有
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
buffer 则用来缓冲读写数据,常见的 buffer 有
ByteBuffer
MappedByteBuffer
DirectByteBuffer
HeapByteBuffer
ShortBuffer
IntBuffer
LongBuffer
FloatBuffer
DoubleBuffer
CharBuffer
1.2 Selectorselector 单从字面意思不好理解,需要结合服务器的设计演化来理解它的用途
多线程版设计
⚠️ 多线 ...
JVM
Java内存区域详解常见面试题:
介绍一下Java内存区域(运行时数据区)
Java对象的创建过程
对象的访问定位的两种方式
运行时数据区Java虚拟机在执行程序过程中,会把分配给Java虚拟机的内存分成个若干个不同的数据区域。但是JDK1.8和之前会有些改变。
1.8之前:
1.8之后:
注意:本地内存就是操作系统所持有的内存,JVM虚拟机的内存也是从操作系统的内存分出来的。
(本地内存,本地方法都是属于操作系统的)
线程私有的:
程序计数器
虚拟机栈
本地方法栈
线程共享的:
堆
方法区
直接内存 (非运行时数据区的一部分)
Java 虚拟机规范对于运行时数据区域的规定是相当宽松的。以堆为例:堆可以是连续空间,也可以不连续。堆的大小可以固定,也可以在运行时按需扩展 。虚拟机实现者可以使用任何垃圾回收算法管理堆,甚至完全不进行垃圾收集也是可以的。
程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等功能都需要依赖这个计数器 ...
Dubbo
RPCRPC协议实际上就是约定了远程调用过程中
1.数据的格式
2.数据如何传输
RPC协议是应用层之上的协议,可扩展性很强
Dubbo用法示例version版本号在provider里面有两个不同的实现类
在consumer里面可以指定不同的提供者版本,获得不同的方法
指定protocol协议
可以指明需要用到的是哪一种协议
使用rest协议调用服务创建使用rest的类
之后就可以用这个服务,调用这个协议
根据这个
rest协议在8083端口
所以可以发送localhost:8083/site/name?name=haohao
消费者通过url直连指定的服务提供者
服务超时服务提供者和服务消费者都可以配置服务超时时间(默认时间为1秒,当然可以指定超时时间)
集群容错
服务降级
微服务
微服务技术栈认识微服务单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:架构简单,部署成本低
缺点:耦合度高(维护困难、升级困难)
分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
优点:降低服务耦合,有利于服务升级和拓展
缺点:服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
服务拆分的粒度如何界定?
服务之间如何调用?
服务集群地址如何维护?
服务的健康状态如何感知?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构。
微服务微服务的架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
自治:团队独立、技术独立、数据独立,独立部署和交付
面向服务:服务提供统一标准的接口,与语言和技术无关
隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题
微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,可以认为微服务是一种 ...
数据结构
串、数组、广义表广义表广义表(又称列表Lists)是n≥0个元素a0, a1, ..an-1的有限序列,其中每一个ai可能是原子,或者是一个广义表。
拓宽了的线性表就是广义表(也就是说,广义表里面什么都可以包括,可以包括一个元素,也可以包括一个广义表)
广义表一般记作:
LS = (a1 , a2, · · ·, an )
其中,LS是广义表(a1, a2, …,an )的名称,n是其长度。
一些例子
广义表的性质
广义表里面的操作(1) 取表头 GetHead(LS): 取出的表头为非空广义表的第一个元素,它可以是一个单原子,也可以是一个子表。
(2) 取表尾 GetTail(LS): 取出的表尾为除去表头之外,由其余元素构成的表。即表尾一定是一个广义表。
例子:(可以认真看一下这个例子,基本上所有的运算都会解决了)
病毒感染检测案例
但是但是,可以观察一下第二个串,主串里面没有目标串但是还是被感染了:
这是因为目标串为RNA,是环状病毒,所以有多种情况可以感染到,如何实现呢
比如目标串是baa,长度为3,我们可以给他扩展成baabaa,之后我们循环三次 ...
新建虚拟机并配置基本linux部署环境
之前把linux虚拟机删除了,一直用的是云服务器,大厂的白嫖服务器都用完了呜呜,但是还没到双十一好烦,只能回归本源用自己电脑上的虚拟机了,所以我把镜像给下载回来了…话说虚拟机是真的占内存的说…
新建虚拟机
我装的是韩老师的Centos7
之后开始流程
取个名字
开始安装系统
选择镜像
选择install CentOS7
之后按一次回车
等会会进入这个界面
选择语言
之后等待一会
进入这个页面
点击软件选择
之后再等待一会(不要乱点)
选择安装位置进行修改
点击完成
选择文件系统为ext4
按照相同的步骤加入swap分区
添加根分区
点击完成
接收更改就可以啦
勾选掉KDUMP
打开网络
关闭安全策略,因为是我们自己做的
之后这个页面就设置完成啦
点击右下角的开始安装
安装好会提示让重启,重启就好啦
同意协议
之后就可以安装好啦
安装所需要的软件安装wget命令如果需要通过使用wget命令,直接通过网络下载maven安装包时,需要在linux系统中安装wget命令。
yum -y install wget 常规的安装wge ...
谷粒学院
Day1本次项目实现的是一个在线教育平台
商业模式B2C模式(Business To Customer 会员模式)
商家到用户,这种模式是自己制作大量自有版权的视频,放在自有平台上,让用户按月付费或者按年付费。 这种模式简单,快速,只要专心录制大量视频即可快速发展,其曾因为 lynda 的天价融资而大热。
但在中国由于版权保护意识不强,教育内容易于复制,有海量的免费资源的竞争对手众多等原因,难以取得像样的现金流。
这种商业模式就是本次项目所使用的模式。
谷粒学院 http://www.gulixueyuan.com/
B2B2C模式平台链接第三方教育机构和用户,平台一般不直接提供课程内容,而是更多承担教育的互联网载体角色,为教学过程各个环节提供全方位支持和服务。
或者来说,举个例子,京东里面有京东自营店,还有其他个体卖家。
腾讯课堂 https://ke.qq.com/
谷粒学院功能简介谷粒学院,是一个B2C模式的职业技能在线教育系统,分为前台用户系统和后台运营平台。
Mybatis Plus知识点总结
配置环境配置properties文件(根据自己的需要改)
数据库环境看着配就行
...
瑞吉外卖
这个实战项目是我目前做的最完整的一个项目,前前后后做了两遍,感觉从中可以学到不少的东西,以前做的项目一般都是不做笔记的,但是感觉不做笔记就会感觉空落落的,这次会完整记录下本次项目的开发过程,供自己学习参考。
Day1软件开发整体介绍软件开发流程
作为软件开发人员,我们的侧重点主要在编码上,也就是第三个阶段,但是一些小公司需要我们的能力更强一些,不局限于某一个步骤,也就是俗话说的脏话累活都我们干
角色分工
这是规范的,但是小公司的话可能大部分角色都得我们自己担任
软件环境分为开发环境,测试环境,生产环境
瑞吉外卖项目介绍项目介绍本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用主要提供给消费者使用,可以在线浏览菜品、添加购物车、下单等。
本项目共分为3期进行开发:
第一期主要实现基本需求,其中移动端应用通过H5实现,用户可以通过手机浏览器访问。
第二期主要针对移动端应用进行改进,使用微信小程序实现,用户使用起来更加方便。
第三期主要 ...
Nginx
一、Nginx简介Nginx概述Nginx(“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用 nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告表明能支持高达50000个并发连接数
正向代理在客户端(浏览器)配置代理服务器,通过代理服务器进行互联网访问
反向代理反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址
正向代理和反向代理总结正向代理即是客户端代理, 代理客户端, 服务端不知道实际发起请求的客户端.
反向代理即是服务端代理, 代理服务端, 客户端不知道实际提供服务的服务端
负载均衡单个服务器解决不了,我们增加服务器的数量,然后将请求分发 ...
Redis
NoSql与Sql的区别认识NoSQLNoSql可以翻译做Not Only Sql(不仅仅是SQL),或者是No Sql(非Sql的)数据库。是相对于传统关系型数据库而言,有很大差异的一种特殊的数据库,因此也称之为非关系型数据库。
结构化与非结构化传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名.字段数据类型.字段约束等等信息,插入的数据必须遵守这些约束:
而NoSql则对数据库格式没有严格约束,往往形式松散,自由。
可以是键值型:
也可以是文档型:
甚至可以是图格式:
关联和非关联传统数据库的表与表之间往往存在关联,例如外键:
而非关系型数据库不存在关联关系,要维护关系要么靠代码中的业务逻辑(最好靠业务逻辑),要么靠数据之间的耦合:
{ id: 1, name: "张三", orders: [ { id: 1, item: { id: 10, title: "荣耀6", price: 4999 } }, ...

