【复习】Spring
...
【复习】Java集合
集合概念集合与数组数组是固定长度;集合是动态长度的数据结构,需要动态增加或删除元素 数组可以包含基本数据类型和对象;集合只能包含对象 数组可以直接访问元素;集合需要通过迭代器访问元素 线程安全的集合?java.util包: Vector:线程安全的动态数组,内部方法大部分都经过synchronized修饰 Hashtable:线程安全的哈希表,内部方法大部分都经过synchronized修饰,这样被所著的就是整个Table对象(底层是数组+链表) 并发Map: ConcurrentHashMap: JDK7,ConcurrentMap加的是分段锁(Segment锁),每个分段锁含有整个table的一部分,不同分段之间的并发互不影响【每个Segment都类似一个小的HashMap,对于插入、更新、删除操作时,需要先定位到具体的Segment,再在Segment上加锁】 JDK8,取消了Segment字段,直接在table元素上枷锁,实现对每一行进行加锁,进一步减少了并发冲突。主要通过volatile + CAS(乐观锁)或...
【复习】Java基础
...
Redis
Redis主从搭建主从集群单节点Redis的并发能力有上限(上万),要进一步提高Redis的并发能力,就要搭建主从集群,实现读写分离。 主节点会把数据同步给从节点,让每个从节点的数据和主节点一样。 启动多个Redis实例 建立集群 在从节点通过命令配置主从关系:slaveof <masterip> <masterport> info replication:查看节点状态 临时:在控制台输入slaveof命令 永久:在redis.conf文件中利用slaveof命令指定master节点 成功后,进入主节点,输入info...
OpenFeign远程调用返回的是List<T>类型的数据
在使用 OpenFeign 进行远程调用时,如果接口返回的是 List 类型的数据,可以通过以下方式处理: 直接定义返回类型为ListFeign 默认支持 JSON 序列化/反序列化,如果服务端返回的是 List的JSON格式数据,可以直接在 Feign 接口中定义返回类型为 List。 @FeignClient(name = "item-service")public interface ItemClient { @GetMapping("/items") List<Item> getItems();} 使用ResponseResult包装返回类型@FeignClient(name = "item-service")public interface ItemClient { @GetMapping("/items") ResponseResult<List<Item>>...
Mysql事务
ACID特性MyISAM不能完整支撑ACID特性。 原子性(A):事务中的每个操作要像原子一样不可分割,要么全部成功,要么全部失败。提供了undo log日志,一行数据的一次改动对应一条undo log日志,如果有操作异常则会触发回滚,反向执行undo log日志,将数据恢复到这些操作之前。 一致性在原子性 + 隔离性 +...
Kafka
基本概念 producer:发布消息的对象(主题生产者) topic:kafka将消息分门别类,每一类消息称为一个主题 consumer:订阅消息并处理发布的消息的对象成为主题消费者 broker:已发布的消息保存在一组服务器中,成为kafka集群。集群中每个服务器都是一个代理(Broker)。消费者可以订阅一个或多个主题(topic),并从broker拉取数据,从而消费这些已发布的消息。 安装kafkakafka对于zookeeper是强依赖,保存kafka相关的节点数据,所以安装kafka之前必须先安装zookeeper 1. 安装zookeeperdocker run -d \--name zookeeper \--restart always \-p 2181:2181 \zookeeper:3.4.14 2. 安装kafkadocker run -d --name kafka \--restart always \--env KAFKA_ADVERTISED_HOST_NAME=192.168.140.102 \--env...
Java动态代理
为什么需要代理?对象如果嫌自己的事太多了,可以通过代理来转移部分职责。 代理长什么样?对象有什么方法想被代理,代理就一定要有对应的方法。但是方法做的事不同,代理是去调对象的方法。 中介如何知道要派唱歌、跳舞方法的代理?通过继承接口 实现: interface Star { String sing(String name); void dance();}@Data@AllArgsConstructorclass BigStart implements Star { String name; @Override public String sing(String name) { System.out.println(this.name + "唱歌:" + name); return "唱完了,谢谢"; } @Override public void dance() { ...
Java Virtual Machine(JVM)
JVM跨平台原理跨平台:一次编译,到处运行本质:不同操作系统上运行的JVM不一样,只需要把java程序编译成一份字节码文件,JVM执行不同的字节码文件。 Java是高级语言,提前编译一下(变成字节码文件),再执行起来就会快一点 JVM整体结构 解释器:执行方法区中存储的字节码指令垃圾回收器:回收垃圾对象JIT编译器:处理一些热点的字节码指令。【字节码里可能存在一些热点指令,这些热点指令翻译过一次,就把他们缓存起来,下一次再执行热点指令,就去缓存中取。从而提高执行效率】方法区:类加载子系统把字节码加载到方法区中堆:执行过程中产生的对象Java方法栈:当前线程执行到某个java里的方法,就会放入这里本地方法栈:当前线程执行native方法,就会放入这里(用Java语言以外的语言编写的方法)程序计数器:记录下一条指令的地址 类加载子系统 加载:把字节码文件,加载到方法区的内存空间中。 链接:(static int i =...
hexo-Butterfly搭建博客
Hexo是一个基于Node.js的静态网站生成器,主要用于快速搭建博客和个人网站。它使用Markdown语法编写文章,能够迅速生成静态页面并部署到服务器上。 配置node 使用nvm安装node(v20.9.0)后配置镜像 安装并使用node: nvm install 20.9.0nvm use 20.9.0 查看当前node版本: node -v 配置镜像: npm config set registry https://registry.npmmirror.com 可以通过以下命令查看镜像是否配置成功: npm config get registry 配置node 下载express: npm install express -g 安装hexo本地环境: npm install -g hexo 配置git生成ssh: ssh-keygen -t rsa -C "邮箱地址" 所有要输入的地方都按回车,使用默认值 把密钥添加到github账户中:测试ssh是否绑定成功: ssh -T git@github.com 输入ssh...