自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 手撕多线程代码题

ava5提供了Future接口来代表Callable接口里call()方法的返回值,并且为Future接口提供了一个实现类FutureTask,这个实现类既实现了Future接口,还实现了Runnable接口,因此可以作为Thread类的target。(1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。1】定义Runnable接口的实现类,一样要重写run()方法,这个run()方法和Thread中的run()方法一样是线程的执行体。...

2022-08-15 04:03:58 133 1

原创 AQS原理

Exclusive(独占)只有一个线程能执行,如ReentrantLock。又可分为公平锁和非公平锁公平锁按照线程在队列中的排队顺序,先到者先拿到锁非公平锁当线程要获取锁时,无视队列顺序直接去抢锁,谁抢到就是谁的Share(共享)多个线程可同时执行,如CountDownLatch、Semaphore、CyclicBarrier、ReadWriteLock我们都会在后面讲到。protectedbooleantryAcquire(int)//独占方式。......

2022-07-30 11:34:03 134

原创 Redis数据结构及应用

Redis是key-value存储方式,Redis的存储变量指的的是value对应的变量类型(key只能用String对象)Redis的底层数据结构有SDS,压缩列表,双向链表,哈希表,整数集合,跳表。

2022-07-26 20:18:06 258

原创 实现幂等性的方法

在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

2022-07-18 12:53:51 898

原创 ZooKeeper

ZooKeeper 是一个开源的分布式协调服务,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通常被用于实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。另外,ZooKeeper 将数据保存在内存中,性能是非常棒的。 在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致

2022-07-12 19:52:04 150

原创 Redis之缓存击穿,缓存雪崩,缓存穿透

缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。大量数据同时过期;Redis 故障宕机;大量数据同时过期:针对大量数据同时过期而引发的缓存雪崩问题,常见的应对方法有下面这几种:Redis 故障宕机针对 Redis 故障宕机而引发的缓存雪崩问题,常见的应对方法有下面这几种:因为 Redis 故障宕机而导致缓存雪崩问题时,我们可以启动服务熔断机制,暂停业务应用对缓存服务的访问,直接返回错误,不用再继续访问数据库,从而降低对数据库的访问压力,保证数据库系统的

2022-07-07 21:38:26 353

原创 Redis主从复制

由于数据都是存储在一台服务器上,如果出事就完犊子了,比如:如果服务器发生了宕机,由于数据恢复是需要点时间,那么这个期间是无法服务新的请求的;如果这台服务器的硬盘出现了故障,可能数据就都丢失了。要避免这种单点故障,最好的办法是将数据备份到其他服务器上,让这些服务器也可以对外提供服务,这样即使有一台服务器出现了故障,其他服务器依然可以继续提供服务。多台服务器要保存同一份数据,这里问题就来了。这些服务器之间的数据如何保持一致性呢?数据的读写操作是否每台服务器都可以处理?Redis 提供了主从复制模式,来避免上

2022-07-07 20:09:17 155

原创 Redis持久化机制

Redis持久化就是将把缓存数据保存在硬盘,通过RDB和AOF两种方式实现。Redis 提供了两个命令来生成 RDB 文件,分别是 save 和 bgsave,他们的区别就在于是否在「主线程」里执行:Redis 还可以通过配置文件的选项来实现每隔一段时间自动执行一次 bgsava 命令,默认会提供以下配置:只要满足上面条件的任意一个,就会执行 bgsava,它们的意思分别是:900 秒之内,对数据库进行了至少 1 次修改;300 秒之内,对数据库进行了至少 10 次修改;60 秒之内,对数据库进行了至

2022-07-07 09:26:30 287

原创 logcat底层源码详解

即从打开日志设备文件到读取日志设备文件的日志记录到输出日志记录的主要过程保存从日志文件读出来的日志记录每一个 log_device_t 都包含有一个 queued_entry_t 队列, queued_entry_t 就是对应从日志设备文件读取出来的一条日志记录了 ,而 log_device_t 则是对应一个日志设备文件。从logcat来看共有4个日志设备文件,它们分别是 /dev/log/main , /dev/log/system , /dev/log/events 和 /dev/log/rad

2022-07-05 20:03:51 749

原创 VS code 配置遇到的问题

解决方法:1、在终端输入:2. 打开vscode 按ctrl+shift+p 。搜索c/c++:Edit Configurations(JSON)3.将第一步找到的include路径加到“IncludePath”

2022-06-30 19:49:32 92

原创 一致性哈希

大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。但是问题来了,现在有那么多个节点(后面统称服务器为节点,因为少一个字),要如何分配客户端的请求呢?其实这个问题就是「负载均衡问题」。解决负载均衡问题的算法很多,不同的负载均衡算法,对应的就是不同的分配策略,适应的业务场景也不同。最简单的方式,引入一个中间的负载均衡层,让它将外界的请求「轮流」的转发给内部的集群。比如集群有 3 个节点,外界请求有 3 个,那么每个节点都会处理 1 个

2022-06-29 20:02:21 137

原创 线程池-ThreadPollExecutor

降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高线程的可管理性:当任务到达时,任务可以不需要等到线程创建就能立即执行。提高响应速度:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。在 Java 5 之后,通过 Executor 来启动线程比使用 Thread 的 start 方法更好,除了更易管理,效率更好(用线程池实现,节约开销)外,还有关键的一点: 有助于避免 this 逃逸问题。(1) 任务(Runnab

2022-06-28 20:12:50 215

原创 进程和线程的区别,全面解析!!

线程相比进程能减少开销,体现在:线程的创建时间比进程快,因为进程在创建的过程中,还需要资源管理信息,比如内存管理信息、文件管理信息,而线程在创建的过程中,不会涉及这些资源管理信息,而是共享它们;线程的终止时间比进程快,因为线程释放的资源相比进程少很多;同一个进程内的线程切换比进程切换快,因为线程具有相同的地址空间(虚拟内存共享),这意味着同一个进程的线程都具有同一个页表,那么在切换的时候不需要切换页表。而对于进程之间的切换,切换的时候要把页表给切换掉,而页表的切换过程开销是比较大的;由于同一进程的各线

2022-06-27 22:12:59 102

原创 java I/O小结

同步阻塞 IO 模型中,应用程序发起 read 调用后,会一直阻塞,直到内核把数据拷贝到用户空间。用户发起系统调用(read请求)后进入阻塞状态(等待数据)->CPU对磁盘发起IO请求->等待磁盘寻址准备数据->找到数据后对CPU发起中断->将内核缓存区的数据拷贝到用户缓冲区->用户获取数据即进程会一直阻塞直到数据准备完毕同步非阻塞IO , 也被认为是IO多路复用同步非阻塞IO:IO多路复用:IO多路复用一个进程/线程处理多个请求,减少了进程/线程的开销异步 IO 是基于事件和回调机制实现的,

2022-06-23 10:23:15 193

原创 I/O多路复用:select,poll,epoll

一个进程虽然任一时刻只能处理一个请求,但是处理每个请求的事件时,耗时控制在 1 毫秒以内,这样 1 秒内就可以处理上千个请求,把时间拉长来看,多个请求复用了一个进程,这就是多路复用select/poll/epoll 内核提供给用户态的多路复用系统调用,进程可以通过一个系统调用函数从内核中获取多个事件。select 实现多路复用的方式是,将已连接的 Socket 都放到一个文件描述符集合,然后调用 select 函数将文件描述符集合拷贝到内核里,让内核来检查是否有网络事件产生,检查的方式很粗暴,就是通过遍历

2022-06-22 18:00:09 105

原创 网络系统--零拷贝

目的: 磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些 优化的目的就是为了提高系统的吞吐量, 另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。零拷贝作用:通过减少 「用户态与内核态的上下文切换」 和 「内存拷贝」 的次数优化文件传输性能什么是零拷贝: 零拷贝(Zero-copy)技术,因为我们没有在内存层面去拷贝数据,也就是说全程没有通过 CPU 来搬运数据,所有的数据都是通过 D

2022-06-21 17:23:11 376

原创 shell脚本快速代码排查

1. cat 文件名: 查看文件2. grep -option(参数) ‘word’(关键词) file(文本文件);3. egrep同时查找多个字符串使用多条件搜索模式时,请使用|管道符。4. shell 脚本自动查找指定路径下包含某关键字的所有文件...

2022-06-20 17:30:31 360

原创 操作系统--进程间通信

操作系统--进程通信

2022-06-20 11:48:53 280 1

原创 sql练习

distinct 去重查找最大值1.通过聚合函数取最大值select max(gpa)from user_profilewhere university = '复旦大学'2.通过 order by desc 从大到小排序 ,然后通过 limit 取第一条select gpafrom user_profilewhere university = '复旦大学'order by gpa DESClimit 1...

2022-05-17 11:01:18 55

原创 快速排序模板

Partition函数def partition(nums, left, right): pivot = nums[left]#初始化一个待比较数据 i,j = left, right while(i < j): while(i<j and nums[j]>=pivot): #从后往前查找,直到找到一个比pivot更小的数 j-=1 nums[i] = nums[j] #将更小的数放入左边 w

2021-08-20 23:34:55 91

原创 JavaWeb

JavaWeb提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录JavaWeb前言6、Servlet6.1 Servlet简介6.2 HelloServlet6.3 Servlet原理6.4 Mapping问题前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考6、Servlet6.1 Servlet简介S

2021-08-20 15:03:21 66

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除