- 博客(171)
- 收藏
- 关注
原创 【八股】AQS,ReentrantLock实现原理
ReentrantLock是一个支持可重入的锁,调用lock方法获取锁之后,再次调用lock,不会阻塞。支持公平锁和非公平锁,默认是非公平锁。
2024-05-05 05:07:22 341 1
原创 【八股】synchronized
synchronized是Java中用于实现同步的关键字,每个对象内部都有一个锁(也监视器锁或互斥锁), 而synchronized就是一种用来获取或释放这个锁的机制。其中owner是关联的获得锁的线程,并且只能关联一个线程;waitset关联的是处于Waiting状态的线程。他的底层是由monitor实现的,monitor是jvm级别的对象,由c++实现,线程获取锁需要使用对象锁关联monitor。在monitor内部有3个属性,分别是owner,entrylist,waitset。
2024-04-25 03:45:30 224
原创 【八股】Spring Boot
首先,SpringBoot的核心注解@SpringBootApplication里面包含了三个注解,@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan,其中@EnableAutoConfiguration是实现自动装配的注解,如下图所示。最后根据读到配置类中的@ConditionOnClass判断是否有对应的class文件, 如果有的话就加载这个类,把这个配置类的所有Bean放入Spring容器内使用。
2024-04-22 04:06:40 377
原创 【八股】Redisson分布式锁
主要了解了Redisson分布式锁实现的三个功能:1.可重入 -> 防止死锁2.可重试(非阻塞获取锁)3.自动续约。
2024-04-17 23:04:53 717
原创 【八股】MySQL
覆盖索引是指,查询使用的索引,需要返回的列,在该索引的叶子节点中已经能够全部找到。简单的来说,覆盖索引就是查询索引后,已经得到了所需字段的信息,不需要回表查询。
2024-04-13 01:47:27 337 2
原创 【八股】AOP
AOP(Aspect Oriented Programming),面向切面编程,他是一种编程范式。在不改变原始设计的的基础上对其进行功能增强。切面:通知和切入点之间的绑定关系。切入点:追加功能的方法。
2024-04-11 03:02:04 151
原创 【项目】牛马点评 问题汇总
项目里没实现,如果让我做的话,我会获得用户的ip地址,然后存到redis里,设置个ttl比如1分钟,每次请求过来后就先看看redis里有没有这个ip,有的话就不发验证码。
2024-04-03 02:15:38 267
原创 【八股】Spring MVC
Spring MVC 是 Spring 中的一个很重要的模块,是一个根据MVC架构推出的web开发框架,目的是为了简化Java的web开发。
2024-03-31 21:07:57 338
原创 【八股】IOC
如果用注解注入,那么Spring项目启动时不会报错,直到用到循环依赖的时候就会死循环,后面会报错栈溢出,就是那个StackOverflowError。5. 默认是根据名称(byName)进行自动装配的,如果没找到Bean,就再根据类型(byType)进3装配,如果还是没找到,就会报错。如果用构造器注入,那么Spring项目启动时就会报错,提醒你的代码里有循环依赖的问题。6. @Resource也可以加上 name 属性值,根据name的名称进行注入。因为有可能会有循环依赖这个问题。
2024-03-31 20:35:37 178
原创 【八股】集合
HashMap是基于哈希表的Map接口实现,是非线程安全的。JDK1.8之前 HashMap 底层是数组+链表实现的,数组是HashMap的主题,链表则是为了解决哈希冲突的。(拉链法)JDK1.8之后 HashMap 在解决哈希冲突的方法有了较大的变化,当链表长度大于等于8并且数组长度大于等于64后,会将链表转化为红黑树,以减少搜索时间。
2024-03-29 16:57:26 195
原创 【八股】线程池
maximumPoolSize - 最大线程数。corePoolSize - 核心线程数。keepAliveTime - 生存时间。threadFactory - 线程工厂。workQueue - 阻塞线程队列。handler - 拒绝策略。unit - 时间单位。
2024-03-26 10:19:27 272
原创 【八股】ThreadLocal原理
每个Thread里面都有一个类型为ThreadLocalMap的变量,这个ThreadLocalMap类型的变量其实就是个哈希表,这个哈希表里面的每个Entry的key为ThreadLocal,value为资源对象。最后看到Thread.java源码里的set函数,其实就是找到当前线程的ThreadLocalMap,然后往里面传入key为ThreadLocal,value为资源对象的Entry。
2024-03-21 19:40:32 238
原创 做黑马程序员项目时,bat文件设置环境(例如打开Redis,Nginx服务)
每次做黑马项目时,都要手动打开Nginx和Redis,又不想把这两个加到开机自启动服务里,不想增加耦合性,因此可以写个bat文件作为折中方案,每次要跑x项目时,就运行一下x.bat文件搭一下环境。做黑马点评时需要打开Redis和Nginx,这里把打开Redis和Nginx的指令都写在bat文件里。以后要搭某个项目的环境的话,只要运行一下那个项目对应的bat文件即可。hmdp.bat文件里的内容。
2024-03-08 12:40:53 238
原创 OpenRadar DOA函数 Bartlett/CBF和Capon使用
Bartlett / CBF原理Capon原理openradar的作者代码水平很高,但里面有很多bug,所以初学者(去年的我)会比较难受,比如他demo里的解析文件格式就很迷啊等等。。所以加油慢慢积累吧。
2023-10-06 23:40:30 624
原创 解决selenium的getdrive()方法阻塞问题
当然我也是刚了解selenium这个库,这里提供给各位一个思路,如果各位有更好的思路欢迎在评论区跟我交流 : )如果是0,那就继续找;如果非0,就表明找到了,就可以跳出循环,做接下来的操作了。
2023-08-24 21:40:30 1198
原创 vsc code-runner插件运行python文件,解释器更改为ananconda
code-runner刚下载下来的默认解释器是系统自带的,并不是anaconda的。找到code-runner: executor map。找到python的命令,改为自己的解释器位置即可。
2023-01-14 20:22:02 554
原创 ubuntu,mysql
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <stdlib.h>#include <assert.h>#include <s
2022-04-14 10:32:12 100
原创 父子进程通信:管道
实现原理:内核借助环型队列机制,使用内核缓冲区实现。管道的限制:数据不能进程自己写,自己读管道中数据不可以反复读取。一旦读走,管道中不再存在。采用半双工通信方式,数据只能在单方向上流动。只能在有公共祖先的进程间使用管道。管道读写行为:读管道:1.管道有数据,read返回实际读到的字节数2.管道无数据:(1)管道写端全部被关闭时,read返回0。(2)管道写端没有全部被关闭,read阻塞等待。写管道:1.管道读端全部被关闭,进程异常终止(也可以使用捕捉SIGPIPE信号,使进程不
2022-04-09 19:18:44 1366
原创 条件变量,信号量实现生产者消费者
#include <stdio.h>#include <ctype.h>#include <sys/socket.h>#include <arpa/inet.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include <unistd.h>#include <errno.h>#include
2022-04-08 20:23:45 144
原创 锁,条件变量
使用mutex(互斥锁)的一般步骤:pthread_mutex_t lock; 创建锁pthread_mutex_init(); 初始化pthread_mutex_lock() ; 加锁访问共享数据(stdout)pthread_mutex_unlock(); 解锁pthread_mutex_destroy(); 销毁锁restrict关键字:用来限定指针变量。该指针指向的内存所进行的操作,必须由本指针完成。注意事项:保证锁的粒度,越小越好(访问结束立即解锁)读写锁:pthrea
2022-04-06 23:23:01 205
原创 bash快捷键,系统目录
移动到第一个字母 ctrl + a移动到结尾 ctrl + e上条指令 ctrl + p下条指令 ctrl + n左 ctrl + b右 ctrl + f删除光标后面的 ctrl + d删除光标前面的 backspace删除整行命令 ctrl + uLinux系统中“所见皆文件”bin:存放二进制可执行文件boot:存放开机启动程序dev:存放设备文件home:存放用户etc:用户信息和系统配置文件lib:库文件root:管理员宿主目录(家目录)[cd ~]usr:用户资
2022-03-25 20:50:30 1728
原创 virtual box设置共享文件夹
首先virtual box新增一个共享文件夹在ubuntu终端运行sudo mkdir windowssudo mount -t vboxsf share ~/windows
2022-03-05 02:46:35 393
原创 线程相关函数
pthread_ t pthread_self(); 获取线程idint pthread_create(pthread_t *tid(传出参数), 线程属性(NULL), 子线程回调函数, 参3的参数(NULL));【成功返回0】创建子线程void pthread_exit(); 退出当前线程exit(); 退出当前进程return; 返回调用者那里pthread_join();pthread_mutex_t lock;pthread_mutex_init;pthread_mutex_l
2022-02-28 00:05:39 89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人