- 博客(63)
- 资源 (4)
- 收藏
- 关注
原创 二、并发编程
3. 只能保证一个共享变量的原子操作 : 对多个变量操作时,CAS无法保证操作的原子性,因为对于一个内存地址来说,其内不只会存储一个变量,如果要对多个变量进行操作则需要用到锁或者进行合并包装为一个引用类型在进行原子操作。乐观锁: 每次查询数据时都会认为不会被修改,所以它不会加锁,但是在对数据更新时,会判断数据是否被修改,一般通过版本号机制实现(也是比较并替换的机制),适用于读多写少的场景,CAS机制就是乐观锁的实现。compare and swap 比较并替换。
2024-11-05 13:46:01 199
原创 一、并发编程
/创建等待线程@Overridewhile (!flag){//条件不满足,进入等待try {//条件满足,退出等待@Overrideflag=true;try {wait(): 会释放锁,并进入对象的等待队列中notify()或notifyAll() : 将等待队列中线程移到同步队列中,当它释放锁后,调用wait()方法的线程才会再次获取锁并继续执行等待通知范式:等待方:1. 获取对象锁。
2024-11-04 17:45:37 811
原创 HashMap的底层原理
hashmap是一个以key,value形式存储的集合,在JDK1.7中是以数组+链表的数据结构,在JDK1.8中是数组+链表+红黑树的数据结构,他在对数据操作时继承了数组的线性查找和链表的寻址修改。其实hashmap主要的目的就是存储数据结构的,查询的方式通过哈希算法计算的。
2023-04-05 21:33:09 432 1
原创 spring的理解 :
AOP : 他是指在一个系统里面包含了很多的组件,每一个组件都会去实现一个功能,但是出去我们自身的业务逻辑之外还会有事物,日志,安全的处理,那么AOP能够在这些业务逻辑中去做其他的事情,也就是在代码执行前执行后可以去做一下日志,安全,事物的处理, 它里面提供了两个动态代理。IOC : 在我们没有引入IOC的时候,一个对象A依赖对象B,那么对象A实例化的时候必须去创建对象B,也就是对象的创建,销毁其控制权都是在自己的手上,那么引入IOC之后,就从一种主动变成了被动的形式。
2023-03-31 21:21:50 273
原创 进程--线程
它是一个进程的可执行单元,有自己的工作内存和程序计数器,一个进程中的多个线程是共享相同的内存单元和内存地址的,可以访问相同的变量和对象。其实我们的操作系统就是负责管理协调硬件,软件等计算机资源的工作,为上层用户,应用程序提供简单易用的服务的系统软件。指为了完成某个特定的任务,用某种语言编写的一组指令的集合,也就是一段静态代码或静态对象。一个进程中存在多个线程就叫做多线程;而多线程之间存在三个安全性问题。它是一个程序的可执行单元,有自己的工作内存和生命周期。
2023-03-10 21:33:05 78
原创 java面试准备
list集合分为arrayList集合 : 查询快,增删慢,它是基于数组结构的,对数据的增删是在数组的尾部进行添加或删除的,其效率相对于LinkedList来说还是比较慢的,因为LinkedList是基于链表结构的查询慢增删快,它的增删只需要去改变指针的指向即可.并且arrayList做增删时还存在扩容问题,他的扩容是需要生成新的集合并且在原数组的基础上扩容1.5倍,他的 默认容量为10。string是一个不可变的类,在对字符串操作是会生成一个新的string对象,这样做的效率会很差并且还会消耗内存。
2023-02-19 18:38:53 495
原创 FastDFS分布式文件系统
高并发处理方式 :1. 文件服务器 : 专门做一个文件服务器,因为对于图片这些资源存储在web服务器上是很消耗资源的,而将文件部署在专门的服务器上,就算服务器发生了异常只要我们的总服务器是正常运行的,那么最多也就是这个文件请求不到2. HTML页面静态化 : 可以缓解服务器的压力,适用于经常访问且内容不经常改变的页面3. 负载均衡 : 负载均衡可以解决高负荷和大量并发请求的问题,也就是将大量请求分摊给多个服务器共同完成任务4. ......
2022-03-31 19:55:44 1074
原创 Fegin远程调用
我们在使用默认fegin的时候它的底层使用的是RestTemplate,而RestTemplate底层又使用到了HttpClient,他默认使用的是java自带的HttpUrlConnection我们可以使用OkHttpfegin默认调用的是HttpUrlConnection每次都只会创建一个链接对象,效率是非常低的,而OkHttp可以使用连接池我们只需要在各个微服务中开启各个微服务的配置即可feign: client: config: default: # def
2022-03-31 10:10:44 376
原创 计算两个时间的差值为多少天
//获取当前时间 Date date = new Date(); DateFormat dateF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String currentTime = dateF.format(date);//当前时间 Date date1 = dateF.parse(currentTime); //订单创建时间 Date u...
2022-03-09 16:55:33 125
原创 new date 返回时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") private Date createTime; //时间
2022-03-09 15:02:03 304
原创 把一张表中某个的数据导入到另外一个表中的某个字段
表A 表B 把表B 中的某个字段的值 导入到 表A 中的某个字段update A set A.字段=(SELECT B.字段 FROM B WHERE 条件)
2022-03-08 17:20:38 499
原创 如何判断索引是否生效 - 为什么Mysql用B+树做索引而不用B-树或红黑树
为什么Mysql用B+树做索引而不用B-树或红黑树?答:查询效率是由磁盘IO的次数决定。B-树:每个节点都有数据域,增加了节点的大小,磁盘的IO次数也增加(因为一次磁盘IO读出的数据量大小是固定的,每次读出的数据少,IO次数就会增加)。B+树相对B树的优点:1、B+树的磁盘读写代价更低。因为只有叶子节点存放数据,非叶子节点只存放索引,B树的每个索引节点都有data域。2、B+树带有顺序访问指针。所有的叶子节点之间有一个链指针,每个叶子节点都代表一个区间,从左到右也是有顺...
2022-03-05 16:31:26 152 1
原创 HashMap为什么使用红黑树
红黑树不追求"完全平衡",即不像AVL那样要求节点的 |balFact| <= 1,它只要求部分达到平衡,但是提出了为节点增加颜色,红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。就插入节点导致树失衡的情况,AVL和RB-Tree都是最多两次树旋转来实现复衡rebalance,旋转的量级是O(1)删除节点导致失衡,AVL需要维护从被删除节点到根节点root这条路径上所有
2022-03-05 16:02:02 664
原创 ConcurrentHashMap在JDK1.8中做了那些优化
JDK1.8的ConcurrentHashMap怎么实现线程安全的JDK1.8放弃了锁分段的做法,采用CAS和synchronized方式处理并发。以put操作为例,CAS方式确定key的数组下标,synchronized保证链表节点的同步效果。jdk1.8ConcurrentHashMap是数组+链表,或者数组+红黑树结构,并发控制使用Synchronized关键字和CAS操作。ConcurrentHashMap<jdk1.7> :使用 Segment数组 + HashEntry数
2022-03-05 15:52:01 913
原创 java- 基础整理
mysql优化:1. 减少访问量 : 设置合理的字段,启用压缩通过索引减少与io磁盘的交互2. 返回更少的数据 : 只返回我们需要的字段或分页数据,,减少磁盘io和网络io3. 减少交互次数 : 减少与数据库的连接次数4. 减少CPU的开销 : 尽量减少数据库排序操作以及全表扫描5. 利用更过的资源,使用表分区,可以增加并行操作,更大限度的利用CPU的资源总的来说 : 就是最大限度的利用索引 , 避免全表扫描 , 减少无效的数据查询全表扫描如果数据库中数据非常大的时候会导致整个程
2022-03-05 12:13:45 605
原创 集合对象分页
page---当前页 pageSize --- 当前数据条数 arrayList --- 对这个集合分页展示 List pageList = new ArrayList<>(); if (page == null || pageSize == null) { pageList = arrayList; } else { Integer begin = pageSize * (page - 1)..
2022-01-27 14:24:27 977
原创 计算两个时间之间的值,以年-月-日-时-分-秒返回
private String getCurrentTime(Date firstTime) { Date currentTime = new Date(); Long diff = currentTime.getTime() - firstTime.getTime();//差值是微秒级别 Calendar currentTimes = dataToCalendar(currentTime);//当前系统时间转Calendar类型 Calen..
2022-01-27 12:05:01 309
原创 计算list<实体>对象中某个字段的和
例如 : 计算BigDecimal类型的字段BigDecimal onlyIncome = list.stream().map(实体-> 实体.get需要计算的字段).reduce(BigDecimal.ZERO, BigDecimal::add);
2022-01-25 15:19:29 363
原创 七牛云上传文件
更改授权码和钥匙,外链域名即可使用package co.yixiang.modules.wechat.rest.utils;import com.google.gson.Gson;import com.qiniu.common.QiniuException;import com.qiniu.common.Zone;import com.qiniu.http.Response;import com.qiniu.storage.BucketManager;import com.qiniu.s
2022-01-24 16:06:29 571
原创 数据库表设计技巧
MySql是一个属于关系型的数据库,5.6版本以后默认的存储引擎是InnoDB数据库表的设计遵循三大范式 :一 . 列是不可拆分的,每列都是不可拆分的最小数据单元二 . 满足第一范式的前提下,表中非主键列不存在对主键不依赖或者部分依赖,确保每个列都和主键相关一般因为存在多个主键或者存在复合主键,所以要拆表三 . 满足第二范式,且表中的列不存在对非主键列的传递依赖,每列都和主键列直接相关,而不是间接相关数据库的设计技巧 : 1. 原始单据与实体之间的关系 :可以是一对一,一对多
2022-01-21 16:00:49 3683
原创 java线程理解
线程是计算机的执行流,java支持多线程并发(理解:多个任务执行,这样计算机在单位时间内处理能力更强),单进程并行线程:当一个程序在运行时就属于一个进程进程 : 包括运行中的程序和程序所使用到的内容和系统资源(补充: 进程就是一个应用程序的可执行单位,进程有自己独立的工作内存)而线程 : 是程序中的一个执行流,每个线程都有自己的寄存器(栈指针,程序计数器),但是代码区是共享的. 也就是不同的线程可以执行同样的函数(补充: 线程是进程的可执行单位,一个进程有多个...
2022-01-21 12:32:57 412
原创 @Validated和@Valid
@PathVariable :接收请求路径中占位符{}的值@RequestParam : 接收请求路径中拼接的参数@RequestBody : 接收请求数据,但是这些数据不在请求路径中的JOSN格式的参数在检验Controller的入参是否符合规范时,使用@Validated或者@Valid在基本验证功能上没有太多区别@Validate 对po实体类进行校验(若modelA中存在modelB,可使用@Validate声明modelB进行校验,具体校验规则在modelB进行声明),不符合则
2022-01-13 12:22:11 727
原创 springBoot请求方式相关注解
@PathVariable --- 接收请求路径中占位符的值作用 : 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中,获取动态参数链接@RequestParam --- 请求参数 --- 可以用在POST、DELETE请求方式作用 :就是把请求中的指定名称的参数传递给控制器中的形参赋值属性 :value / name:请求参数中的名称 (必写参数)--- 指定参数的名称...
2022-01-10 20:22:54 1002
原创 钱包地址生成
//自行定义方法//BC库解密出现no such provider错误 if (Security.getProvider("BC") == null) { Security.addProvider(new BouncyCastleProvider()); } MessageDigest sha = null; byte[] s1 = new byte[0]; MessageDigest rmd = .
2022-01-08 10:57:36 2175
原创 SpringCloud
SpringCloud前置一 :官网地址:Spring Cloud。互联网的服务架构分为:单体架构 将业务的所有功能集中在一个项目中开发,部署为一个节点叫单体架构 优点: 架构简单,部署成本低 缺点: 耦合度高 分布式架构 根据业务功能对系统进行拆分,每个业务模块称为一个服务 优点: 降低服务耦合度,有利于服务升级拓展 缺点: 维护成本增加,服务间调度复杂度增加 SOA架构 微服务架构 微服务是系统架构的一种设计风格,将原本独立的服务拆分成多个小型服务,每个服
2021-11-24 20:51:00 721
原创 SQL中的表达式:
SQL中的表达式:gt --- >(大于) eq --- =(等于) ge --- >=(大于等于) ne --- <>(小于大于,不等于)算术运算符 + 、 - 、 * 、 / (或 div )和 % (或 mod )关系运算符 == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge )逻辑运算符 && (或 and )、 || (或 o...
2021-11-06 15:05:06 3136
原创 FastDFS文件系统和缓存
FastDFS分析: 是分布式文件系统,linux(本身就是一个文件系统)操作系统上的文件系统,只需要调用api即可,因为linux不能很好有效的管理文件,使用FastDFS等同于操作linux,FastDFS可以很好的对文件,视频等进行管理FastDFS 架构工作原理:Tracker server (调度服务器)和 Storage server(存储服务器)。客户端(发起请求)请求 Tracker server 进行文件上传、下载,通过 Tracker serv...
2021-11-02 15:31:18 1078 1
原创 随机数生成
public static void main(String[] args) { //随机生成的数字 int low = 90;//最小值 int high = 100;//最大值 for (int i = 0; i < 1; i++) { // 1 表示随机生成的数有一个 int n = ((int)(Math.random()*(high-low)))+low; System.out.
2021-10-28 20:30:57 64
原创 拦截器&线程变量副本(ThreadLocal)
拦截器是spring提供的一种技术,他的功能类似与过滤器Filter, 他会在进入控制层Controller之前,离开Controller之后以及渲染完毕之后进行拦截拦截器对比过滤器:二者规范不同: filter是在规范中定义,用于servlet容器中.拦截器是spring框架提供的,用于spring容器内 使用范围不同: filter是servlet规定的,只能用于web工程中.拦截器没有限制拦截器使用步骤:自定义一个类实现HandlerInterceptor接口 实现Handler
2021-10-26 15:59:07 628
原创 自动生成代码
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- mysql 驱动--> &l.
2021-10-24 08:17:07 295
原创 Dubbo的配置文件分析
provider服务提供方:application.yml :#tomcat 的端口server: address: 8888#spring配置连接spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/itcast_dubbo?useUnicode=true&characterEncoding=utf8 userna...
2021-10-20 17:16:53 363
原创 Zookeeper
Zookeeper:管理分布式环境下多种多样的服务Apache ZooKeeper的系统为分布式协调是构建分布式应用的高性能服务。zooKeeper本质上是一个分布式的小文件存储系统.提供基于类似于文件系统的目录树方式的数据存储,可以对树中的节点进行有效的管理.可以维护和监控存储的数据的状态变化.通过对这些数据状态的变化从而达到基于数据集群管理适用于存储和协同相关的关键数据,不使用与大数据量存储集中式系统:整个项目就是一个独立的应用,整个应用就是整个项目,所有的东西都在一个应用里面,
2021-10-19 15:23:45 170
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人