概念
把单独的应用程序开发为一套小的服务。
拒绝大型单体应用,基于业务边境进行拆分,各个服务单独运行
是一个架构风格
集群:一堆机器合起来就叫集群,几台服务器进行一个功能
分布式:独立计算机的集合,就像使用单个相关系统。不同的业务在不同的地方
分布式中国的每一个节点都是集群,集群不一定是分布式
远程调用:服务器之间进行相互调用,用http+json
负载均衡:不要让任何一台服务器太忙或者太闲
轮询
最小连接
散列
服务注册:把服务注册到注册中心,感知注册和下线
配置中心:每个服务都在配置中心获取自己的配置,用来管理微服务的配置信息
服务熔断和降级:
经常崩坏,经常达到阙值,本地直接返回本地的数据
系统处于高峰期的时候,非核心业务降级运行(不处理或者简单处理)
Linux 基础
概述
是一个开源免费的操作系统是一个稳定安全的操作系统
主要的发行版有这些
Ubuntu
Cenos
RedHat
Debain
Fedora
SuSE
OPenSuSe
linux主要是一个内核,在里面加上东西,就是发行版
最主要是用在服务器上,免费稳定高效的特点。
Linux和Unix是有很大关系的
网络连接
在一个网段的机器可以相互通信
分为三种方式
桥接模式 虚拟系统可以和外部系统相互通讯但是容易造成ip冲突
Nat模式 网络地址转换 主机上会生成一个虚拟的网卡,会产生另一个ip。和主机之间会有一个连接,可以上其他的内网公网。不会造成ip冲突。但是其他内网的机器不能访问虚拟机
主机模式 就是一个独立的系统,不会和外部进行联系
目录
是采用层级式的树状目录结构
根目录式"/"然后在此目录下再创建其他的目录
在根目录下面式子目录,这些目录是规定好的,一般不能更改
在linux世界中,一切皆文件
linux会把硬件映射成一个文件来管理
bin 常用的指令
etc 配置环境文件
home 文件桌面等等
root admin所用的文件
bo ...
javase
未读简介
多线程是同时有多条执行流程
thread是线程的代表
构造方法
一:
继承Thread
重写run()方法
123456789public class BigStar { public static void main(String[] args) { Thread t = new Test(); t.start(); for(int i = 0;i<5;i++){ System.out.println("big"+i); } }}
12345678public class Test extends Thread{ @Override public void run(){ for(int i = 0;i<5;i++){ System.out.println("test"+i); ...
javase
未读简述
properties文件
是一个属性文件,以键值对形式,不能重复。可以存储用户名和密码
xml文件用于数据存储和关系,存多个用户的时候,可以使用xml文件来存储用户名的多个信息
为系统配置作为信息
日志是把程序运行的信息记录到文件中去
properties
使用Map集合中的properties
不要把他当集合用,用来读写properties属性文件
1234567891011import java.io.*;import java.util.Properties;public class Test { public static void main(String[] args) throws Exception { Properties properties = new Properties(); properties.load(new FileReader("users.properties")); System.out.println(properties); } ...
排序算法
这些开发的时候基本用不到,但是笔试的时候用的比较高
是一组数据按照指定的顺序进行排列
java提供了一个接口Comparable来定义排序规则
12345678910111213141516public class Test implements Comparable<Test>{ private Integer stu_id; private Integer stu_age; public Student(Integer stu_id,Integer stu_age){ this.stu_id = stu_id; this.stu_age = stu_age; } public Student(){ } @Override public int compareTo(Test o) { return this.stu_age - o.stu_age; }}
大于0则前面大
等于0则 ...
javase
未读简介
File代表当前系统下的文件(文件夹)
可以获取文件的信心(大小,文件名,修改时间)
只能够对文献本身进行操作,不能读写文件里的数据
IO流用来读写数据
File代表文本,IO流用来代表数据
File
创建对象
12345678import java.io.File;public class Test { public static void main(String[] args) { File f1 = new File("E:\\work-testroot\\study\\java\\javahight\\javahight2\\ab.txt"); System.out.println(f1.length()); }}
分割符一般用/
File可以指定一个不存在的文件,其长度为0
分为绝对路径和相对路径
绝对路径是带盘符的
相对路径是模块中的路径,不带盘符
常用方法
文件信息
12345678910111213141516import java.io.File;public cl ...
javase
未读jdk8新特性
Stream
新出的一个特性,也叫Steram流
用来操作集合和数组的数据
可以使代码更简介,可读性更强
不使用:
12345678910111213141516171819import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Test { public static void main(String[] args) { List<String> names = new ArrayList<>(); Collections.addAll(names, "aaa", "abb", "cccc"); // 修正了语法错误,使用逗号分隔元素 List<String> list = new ArrayList<>(); for (String name : nam ...
javase
未读其他相关
可变参数
一种特殊的形参
1数据类型...参数名称
可以不传参数,也可以传多个或者一个或者数组
12345678public class Test { public static void main(String[] args) { test(); } public static void test(int...nums){ }}
常常用来接受数据
可变参数在方法内部是一个数组
注意事项:
一个形参列表中,只能有一个可变参数
必须在形参列表的最后面
工具类
Collections是一个用来操作集合的工具类
1234List<String> names = new ArrayList<>();Collections.addAll(names,"与马仔","我累哦二","array");//批量添加数据Collections.shuffle(names);//打乱List的里面数据,在斗地主中可以进 ...
javase
未读Java 集合 basic
集合是一种容器,类似与数组。集合的大小是可变的
Collection 单列集合
Map 双列集合
单列每个元素只会包含一个值
双列每个元素会包含两个值,或者称为键值对
Collection
List接口和Set接口
List系列是有序 可重复 有索引的
Set系列是无序的 不可重复的 无索引的
Hashset无序
LinkedHashSet有序的
TreeSet按照大小默认升序排序
常用方法
12345678910111213141516171819202122import java.util.ArrayList;import java.util.Collection;public class Test{ public static void main(String[] args) { Collection<String> c = new ArrayList<>();//多态 c.add("java");//添加 System.out.p ...
锁
概述
锁是计算机调解多个进程或者并发访问某一资源的机制
分类:
全局锁 锁住所有表
表级锁 锁住整张表
行级锁 锁住整个行的数据
全局锁
对整个数据库的实例进行加锁,整个实例处于只读状态
dml 和ddl语句都会阻塞
数据备份的时候会引发全局锁,从而获得一致性视图,来保证数据的完整性
加全局锁:
123flush tables with read lock;//开锁mysqldump -u -p itcast>itcast.sql;//备份unlock tables;//关锁
在主库上备份,在备份期间都不能更新
在从库上备份,在备份期间不能执行从主库同步过来的二进制日志,会有主从延迟
1mysqldump --single-transaction -uroot -p123 itcast > itcast.sql
这样就能在innnodb引擎上完成不加锁的一致性数据备份
表级锁
锁住整张表,锁定的颗粒大
分类—
表级锁
表共享读锁 可以读取不能写入
表独占写锁 其他的客户端不能写也不能读,但是当前客户端可以读也可以写
元数据锁
意向锁
表级:
加锁:
1lo ...
java 进阶
单元测试
针对最小的功能单元(方法)编写代码对其进行正确性测试
junit单元测试框架
灵活的编写测试代码,可以单个测试,也可以一键完成
还会生成测试报告
步骤:
为需要测试的业务类,定义编写对应的测试类。(公共无参数无返回值)
测试方法必须声明@Test注解
1234567891011121314package com.example.aaa;import org.junit.Test;import static org.junit.Assert.*;public class test1 { @Test public void testtest1() { // 这里是测试逻辑,例如断言 assertTrue(true); }}
例如
断言
最核心的,预测的一种机制
12assertEquals('方法内部有BUG', 4, 5);
assertEquals 是 JUnit 中的一个静态方法,用于验证两个值是否相等。
'方法内部有BUG' 是 ...
介绍
数据结构:计算机存储组织数据的方式,相互搭建一种或多种特定关系的数据元素的集合。在内存中将数据存储起来。
算法:定义良好的计算的过程
十分重要,要学扎实
时间复杂度
评估算法的好坏,评估他的空间和时间。分别是时间复杂度和空间复杂度
现在关注时间复杂度更多
时间复杂度是一个函数(数学中带有未知数的函数表达式),算法中基本操作的执行次数,为算法的时间复杂度
环境不同,执行的时间就会不同。
嵌套循环的时间复杂度
时间复杂度的函数式①:
F(N)=NN+2N+10
把上面的式子简化,只留影响最大的一项。**n越大,后两项对结果的影响就越小。**算个大概就行了
时间复杂度不需要精确的数值
用了O的渐进表示法,保留影响最大的就行了,就是一个大概的值
所以时间复杂度O(N^2)
O的渐进表示法:
如果有常数就用1去替代
只保留最高阶项
最高阶项存在但不是1,则去除与这个项目相乘的常数,得到就是大O阶
一般情况下时间复杂度计算时,未知数都是用的N,别的也是可以的
根据条件,可将O继续缩小
常数:
O(1)是指的能够运算常数次,不是仅仅代表算法只能运行一次
strchar
12345678wh ...