HTTP的发展
HTTP1.1HTTP1.1的特点HTTP最突出的特点就是简单、灵活和易于扩展、应用广泛和跨平台
简单
HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,易于理解,降低了学习和使用的门槛
灵活和易于扩展
HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充
同时 HTTP 由于是工作在应用层(OSI 第七层),则它下层可以随意变化
HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚至把 TCP 层换成了基于 UDP 的 QUIC
应用广泛和跨平台
互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用片地开花,同时天然具有跨平台的优越性
SSL/TLS
SSL 是”Secure Sockets Layer” 的缩写,中文叫做「安全套接层」。它是在上世纪 90 年代 ...
算法与数据结构
算法与数据结构概述数据结构和算法的重要性
算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算
一般来讲 程序会使用了内存计算框架(比如Spark)和缓存技术(比如Redis等)来优化程序,再深入的思考一下,这些计算框架和缓存技术,它的核 心功能是哪个部分呢?
拿实际工作经历来说, 在Unix下开发服务器程序,功能是要支持上千万人同时在线,在上线前,做内测,一切OK,可上线后,服务器就支撑不住了,公司的CTO对代码进行优化,再次上线,坚如磐石。你就能感受到程序是有灵魂的,就是算法。
目前程序员面试的门槛越来越高,很多一线IT公司(大厂),都会有数据结构和算法面试题(负责的告诉你,肯定有的)
如果你不想永远都是代码工人,那就花时间来研究下数据结构和算法
数据结构和算法的关系
数据data结构(structure)是一门研究组织数据方式的学科,有了编程语言也就有了数据结构学好数据结构可以编写出更加漂亮,更加有效率的代码。
要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决.
程序=数据结构+算法
数据结构是算法的基础,换言之,想要学好算法,需 ...
list的Fast-Fail机制
今天看到了一个问题,当A线程在查询List时,B线程对该List进行操作,会发生什么?当时脑子里只想着那肯定是不能操作的呀,但是并不知道怎么个不能操作法,后来才想到,List集合是有快速失败机制的。
fast-fail事件import java.util.ArrayList;import java.util.List;/** * @author xuemiao * @date 2023/2/16 23:23 */public class FastFail { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 10; i++) { list.add(i); } new MyThread1(list).start(); new MyThread2(list).start( ...
Docker学习笔记
Dockerdocker的思想:
集装箱:镜像
码头: 中央仓库
容器:镜像启动后成为容器,会在当前Liunx中开辟一片空间,虚拟出一个小型的linux服务
docker的安装:yum -y install yum-utils device-mapper-persistent-data lvm2 #下载环境yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #指定阿里云的镜像源yum makecache fast #快速建立缓存yum -y install docker-ce #开始安装dockersystemctl start docker #启动dockerdocker run hello-world #测试docker是否安装成功
镜像的命令docker images #查看本地的所有的镜像docker rmi 镜像id #删除镜像,注意如果镜像已经被启动为了容器,首先关闭容器,将容器删除,再来删除镜像docker search 名称 #从 ...
ElasticSearch学习笔记
1-8 ElasticSearch基础1.初识ElasticSearchElasticSearch是一个搜索服务器
1.1-基于数据库查询的问题
性能低、功能弱
1.2-倒排索引倒排索引:将文档中的内容进行分词,形成词条,然后记录词条和数据唯一标识id的对应关系。即为反向索引。
以唐诗为例,所处包含“前”的诗句
正向索引:由《静夜思》–>窗前明月光—>“前”字
反向索引:“前”字–>窗前明月光–>《静夜思》
反向索引的实现就是对诗句进行分词,分成单个的词,由词推据,即为反向索引
“床前明月光”–> 分词
将一段文本按照一定的规则,拆分为不同的词条(term)
1.3-ES存储和查询的原理
index(索引):相当于mysql的库
映射:相当于mysql 的表结构
**document(文档)**:相当于mysql的表中的数据
数据库查询存在的问题:
性能低:使用模糊查询,左边有通配符,不会走索引,会全表扫描,性能低
功能弱:如果以”华为手机“作为条件,查询不出来数据
Es使用倒排索引,对title 进行分词
使用“手机”作 ...
JUC笔记
1、进程与线程概述在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的。JUC就是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包,JDK 1.5 开始出现的。
进程与线程概述进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
一个java程序对应一个进程
一个进程对应一个jvm实例
一个 jvm实例中只有一个运行时数据区
一个运行时数据区只有一个方法区和堆
一个进程中的多个线程需要共享同一个方法区,堆空间
每一个线程在创建时都会创建一个虚拟机栈
每一个线程拥有独立的一套程序计数器,本地方法栈,虚拟机栈
每一个线程内部保存的一个个的栈帧对应着一次次的Java方法调用
补充提问?JAVA真的可以开启线程吗? 开不了的!
public synchronized void start() { /** * This method is not invoked for ...
Mybatis-Plus学习笔记
mybatis基础1、了解Mybatis-Plus1.1、Mybatis-Plus介绍MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:https://mybatis.plus/ 或 https://mp.baomidou.com/
愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
1.2、代码以及文档文档地址:https://mybatis.plus/guide/
源码地址:https://github.com/baomidou/mybatis-plus
1.3、特性
无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
支持 Lambda 形式调用:通过 Lambda ...
MyBatis学习笔记
MyBatis自学笔记Mybatis-9.28环境:
JDK1.8
Mysql 5.8
maven 3.6.1
IDEA
回顾:
JDBC
Mysql
Java基础
Maven
Junit
SSM框架:配置文件的。 最好的方式:看官网文档;
1、简介1.1、什么是Mybatis
MyBatis 是一款优秀的持久层框架
它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github。
如何获得Mybatis?
maven仓库:
<!-- https://mvnrepository.com ...
RabbitMQ笔记
1. 消息中间件概述1.1. 什么是消息中间件MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。多用于分布式系统之间进行通讯。
优缺点优点:引用解耦、异步提速、削峰填谷
缺点:系统可用性降低、系统复杂度提高、一致性问题
优点
为什么使用MQ
在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
开发中消息队列通常有如下应用场景:
1、异步提速:任务异步处理
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
之前:订单系统先去访问DB,然后去访问库存系统、然后访问支付系统、然后访问物流系统,整个过程花费的时间很长。
引入MQ之后:用户先访问DB,然后发送请求给MQ,MQ再发送请求给各个系统,之后返回响应,系统各自的服务自己异步执行。让用户可以更快地得到反馈。
提升用户体验和系统吞吐量(单位时间内处理请求的数目)。
2、应用解耦:应用程序解耦合
MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行 ...
Redis学习笔记
NoSQL数据库简介技术发展技术的分类
1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN
2、解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis
3、解决性能的问题:NoSQL、Java线程、Hadoop、Nginx、MQ、ElasticSearch
Web1.0时代Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。
Web2.0时代随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。
解决CPU及内存压力
解决IO压力
NoSQL数据库NoSQL数据库概述NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库。
NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式存储。因此大大的增加了数据库的扩展能力。
不遵循SQL标准。
不支持ACID。
远超于SQL的性能 ...