Skip to content

Instantly share code, notes, and snippets.

View wgw110's full-sized avatar
💭
I may be slow to respond.

王国伟 wgw110

💭
I may be slow to respond.
View GitHub Profile
1.正向代理与反向代理
正向代理代理客户端,代理服务器收到客户端请求,根据客户端请求去真正的服务器获取所需要的资源。正向代理需要客户端设置某些东西(比如翻墙),并且真正的服务端是不知道
请求者到底是谁的,因为请求是从代理服务器过来的。反向代理代理服务端,客户端发出请求之后,到达代理服务器,代理服务器内部根据客户端请求,将请求分发给其他的服务器,
并且把响应的结果返还给用户,代理服务器对用户屏蔽真正的处理请求的服务器。
正向代理需要你主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去获取访问内容并返回;
而反向代理不需要你做任何设置,直接访问服务器真实ip或者域名,但是服务器内部会自动根据访问内容进行跳转及内容返回,你不知道它最终访问的是哪些机器。
正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;而反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见。
spring启动失败报创建bean异常,没有对应的bean,需要找到对应的接口的实现类看一下接口的实现类是否使用@Service注解修饰
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。即maven主要是用来管理项目的
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则
src/main/java:项目的源代码 src/main/resources:资源文件 src/test/java:测试类代码文件 src/test/resources:测试类资源文件
src/main/webapp/WEB-INF:web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面
target:打包输出目录 target/classes:编译输出目录
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。
pom.xml中包括了:项目依赖,插件,项目的版本,项目构建profile等
maven构建生命周期
验证 validate-->编译 compile-->测试 Test-->包装 package-->检查 verify-->安装 install-->部署 deploy
Maven命令列表
解决的问题:不同的开发环境需要进行不同的环境配置,在A机器所在的环境下可以跑起来但是在B机器所在的环境不一定可以跑起来。
Docker将应用程序以及应用程序依赖的环境打包在一个文件里面,称为image文件,直接运行这个文件就会生成一个虚拟容器,程序在容器里运行就好像在真实的物理机上运行一样。
Docker 的主要用途,目前有三大类。
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker 是服务器----客户端架构。命令行运行docker命令的时候,需要本机有 Docker 服务。
启动docker服务: systemctl start docker
image 文件:Docker 把应用程序及其依赖,打包在 image 文件里面。只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
image是二进制文件,一个文件往往通过继承另一个文件并加上个性化配置而生成。
1.mysql是单进程多线程架构,配置文件my.cnf。
2.mysql的特点之一是插件式的存储引擎结构,存储引擎基于表而非数据库。
3.InnoDB存储引擎支持事务,行锁设计,支持外键,是mysql默认的存储引擎。InnoDB使用MVCC获得高并发性,并且实现了mysql四种隔离级别,默认为可重复读。使用next-key策略来避免幻读。同时还有插入缓冲(insert buffer),二次写(double write),自适应哈希索引,预读等高性能,高可用的功能。
4.MyIsAM存储引擎不支持事务,表锁设计导致并发度不高,支持全文索引。MyISAM缓冲池只缓冲索引文件而不缓冲数据文件。MyISAM存储引擎表由MYD与MYI组成,其中MYD存放数据文件,MYI存放索引文件。
5.memory存储引擎将表中数据存储在内存,如果数据库重启则表中数据全部消失,适合作为存放临时数据的临时表。默认使用哈希索引。MySQL数据库使用memory作为临时表来存放中间结果集。。
6.MyISAM与Innodb的异同以及优劣?
事务支持:InnoDB支持,MyISAM不支持
存储结构:InnoDB所有数据存储于独立的表文件,大小只受限于操作系统文件的大小,一般为2GB。每个MyISAM在磁盘上存储成三个文件,.frm存储表定义,.MYD存储数据文件,.MYI存储索引文件
存储空间:MyISAM可被压缩,所用的存储空间较小,InnoDB需要更多的内存和存储,会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引
其它:InnoDB支持行锁,事务,外键。而MyISAM对这些均不支持,但是MyISAM保存有表的总行数,如果select count(*) from table;会直接取出出该值
https://www.cnblogs.com/bigmonkeys/p/7823268.html
https://www.cnblogs.com/ygj0930/p/6542259.html
@wgw110
wgw110 / gist:2ac1d22f6df4e6fc764308d52d66b208
Last active June 28, 2019 06:25
MySql事务隔离级别实现机制
mysql四种隔离级别:read-uncommitted read-committed repeatable-read serializable
mysql默认级别为可重复读(repeatalbe-read),但是通过MVCC(普通读)与next-key(当前读)解决了幻读的问题。
在RR的隔离级别下,Innodb使用MVVC和next-key locks解决幻读,MVVC解决的是普通读(快照读)的幻读,next-key locks解决的是当前读情况下的幻读。
快照读:简单的select操作,属于快照读,不加锁。 当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。
实现隔离机制的方案主要有两种:
加锁与MVCC
对于读未提交的隔离级别,直接读取版本的最新记录就可以了(不管该事务是否已提交),对于序列化的隔离级别,通过加锁互斥来访问数据。
@wgw110
wgw110 / gist:359fe254401204515b82671e8f5f413b
Last active June 27, 2019 08:32
Dubbo提供的功能
1:启动时检查
开启的时候会检查依赖的服务是否可用,不可用就会阻止Spring初始化,服务也无法启动。
通过<dubbo:reference interface="**" check="true"/> 对依赖的某个服务检查
通过<dubbo:consumer check="false"> 关闭所有服务的启动时检查
通过<dubbo:registry check="false"> 关闭注册中心启动时检查(注册或者订阅是否成功)
2:集群容错
一般而言,通常一个服务对应一个集群,集群中的每个节点都可以对外承担请求的响应,集群容错即如果调用的服务节点出现故障了,是直接报错/不处理/调用集群中的另一个节点
来提供服务。
针对不同的场景有不同的情况。
分库分表就是按照一定的规则,对原有的数据库和表进行拆分,把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
分库分表的方式:垂直于水平
垂直划分数据库是根据业务进行划分,例如将shop库中涉及商品、订单、用户的表分别划分出成一个库,通过降低单库(表)的大小来提高性能,但这种方式并没有解决高数据量带来的性能损耗。同样的,分表的情况就是将一个大表根据业务功能拆分成一个个子表,例如用户表可根据业务分成基本信息表和详细信息表等。
总之,垂直划分主要是根据业务来进行划分的
垂直分库/分表的优缺点
优点:
拆分后业务清晰,达到专库专用。
可以实现热数据和冷数据的分离,将不经常变化的数据和变动较大的数据分散再不同的库/表中。
便于维护
缺点:
目的:保证在并发情况下数据库数据的一致性。不会出现脏数据。
Mysql锁:表锁 行锁
MyISAM引擎支持表锁,而InnnoDB引擎支持表锁与行锁。
表锁:锁住整张表,特点是加锁快,开销小,并发冲突小,发生并发冲突的概率大,但是锁粒度大带来的是并发度比较低。
行锁:锁住表中的某一行,特点是加锁慢,开销小,并发冲突大,锁粒度小,发生并发冲突的概率相对低,并发度高
显示加表锁的语法(针对MyISAM引擎与InnoDB引擎同样适用):
LOCK TABLES tb_name READ; 加读锁,其他会话可读,但不能进行update/insert/delete操作。
LOCK TABLES tb_name WRITE; 加写锁,其他会话不可读,不可写。
UNLOCK TABLES; 释放锁