03反射及动态代理 反射与动态代理反射 反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义 Java9中引入了所谓 Open 的概念,只有当被反射操作的模块和指定的包对反射调用者模块 Open,才能使用 setAccessib 2022-02-01 04Java > java基础
01多线程基础 多线程基础进程和线程 进程是指一个内存中正在运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。 线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程 中是可以有多个线程的,这个应用程序也可以称之为多线程程序 线程可以创建和撤 2022-02-01 04Java > 多线程
02同步容器 同步容器 同步容器的单个操作都是线程安全的,但是组合操作需要手动加锁,例如遍历删除。 同步容器由于对所有的方法都加了锁会有效率问题, 所以推荐使用并发容器。 同步容器包装类1List<String> synchronizedList = Collections.synchronizedList(new ArrayList<>()); SynchronizedL 2022-02-01 04Java > 多线程
03线程池 线程池ThreadLocal 用于为每个线程提供独立的变量副本,实现线程隔离,避免共享变量的线程安全问题。它在高并发场景下广泛应用 实现原理 每个 Thread 对象内部维护一个 ThreadLocalMap,本质是一个定制化的哈希表。 ThreadLocalMap 的键(Key)是 ThreadLocal 实例,值(Value)是线程的变量副本。ThreadLocal 实例是 弱引用(WeakR 2022-02-01 04Java > 多线程
1.MySql基础 数据库三范式 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。满足第一范式是关系模式规范化的最低要求,否则,将有很多基本操作在这样的关系模式中实现不了。(属性不可分) 第二范式:如果关系模式R满足第一范式,并且R的所有非主属性都完全依赖于R的每一个候选关键属性,称R满足第二范式,简记为2NF。(非主键属性,完全依赖于主键属性) 第三范式:设R是 2022-02-01 05数据库 > 05-1关系型数据库
2.MySql进阶 主从复制 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。 主要涉及三个线程:binlog 线程、I/O 线程和 SQL 线程。 binlog 线程(主库) :负责将主服务器上的数据更改写入二进制日志(Binary log)中。 I/O 线程(从库) :负责从主服务器 2022-02-01 05数据库 > 05-1关系型数据库
3.mysql调优 MySql调优索引 重复性较强的字段, 不适合添加索引 性能监控 show status like “handler_read%” 查看用到索引的次数 show status like ‘last_query_coat’ 最后一次查询所耗费的成本 set profiling = 1; 开启监控 show profiles (query n) 根据query id查看 2022-02-01 05数据库 > 05-1关系型数据库
2redis进阶 Redis进阶Redis单线程模型 redis 会将每个客户端都关联一个指令队列。客户端的指令通过队列来按顺序处理,先到先服务。 在一个客户端的指令队列中的指令是顺序执行的,但是多个指令队列中的指令是无法保证顺序的,例如执行完 client-0 的队列中的 command-0 后,接下去是执行哪个队列中的第一个指令是无法确定的,但是肯定不会同时执行两个指令。 redis 同样也会为每个客户端关联一 2022-02-01 05数据库 > 05-2非关系型数据库 > redis
4Redis常见问题 redis热点key的一些问题热点检测 凭借经验,进行预估:例如提前知道了某个活动的开启,那么就将此Key作为热点Key 客户端收集:在操作Redis之前对数据进行统计,记录每个请求,定时把收集到的数据上报,然后由一个统一的服务进行聚合计算。方案简单但是无法适应多语言架构 抓包进行评估:Redis使用TCP协议与客户端进行通信,通信协议采用的是RESP,所以能进行拦截包进行解析 在proxy层,对 2022-02-01 05数据库 > 05-2非关系型数据库 > redis
设计模式 设计模式设计原则单一职责原则 一个类应该只有一个发生变化的原因(业务需求) 开闭原则 软件中的对象,类,模块和函数对扩展应该是开放的,但对于修改是封闭的.这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性 面向抽象编程 里氏替换原则 如果S是T的子类型,那么所有的T类型对象都可以在不破坏程序的情况下被S类型的对象替换 当子类继承父类时,除添加新的方法且完成新 2022-02-01 06设计模式