自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 oj项目后端分析

我们在在线考试中先需要两个表,一个是用户考试表(app_exam)和考试问题表(exam_question_item),我们的用户考试表是我们用户的考试信息的,我们判断用户是否考试结束等,而我们的考试问题表是获取我们问题的,我们先获取是哪个用户的考试,我们在用户选择的分类下随机选50道题,而后我们获取用户选择的答案跟我们的正确答案进行比较,我们通过answer_result字段来获取是否正确,如果错了我们的值就为2,为1表示正确,在我们下次进行考试时我们将排除掉我们用户选择正确的答案。

2024-05-22 21:16:11 554

原创 云盘后端分析

我们需要前端和后端统一好我们文件切片的大小,如100mb要按10mb切的话就要切10片,所以我们要告诉前端我们传到了第几个分片,最后我们再合并分片,下面是我们方法中需要的字段。我们要预览视频在查数据库的时候不要查到mp4的源文件,要查我们刚切片的m3u8文件,所以我们就要从数据库中将我们原有查找的路径切出名字后和其他的枚举组成m3u8的路径。但我们的文件名要重命名,我们在数据库中查一下是否有该文件,有我们就重命名,在名字的后面加个5位的随机数就行了。

2024-01-21 22:25:23 379

原创 redis分布式锁

分布式锁其实就是,控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。我们的分布式锁应具备在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行高可用的获取锁与释放锁高性能的获取锁与释放锁具备可重新进入性能具备锁失效机制,即自动解锁,防止死锁具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。

2024-01-03 20:10:38 379

原创 Redis 过期策略

我们redis会先使用定期过期,在我们设置的过期时间下随机抽取一部分的key进行检查和删除,那有一些老是没有被抽到呢,这是惰性过期就派上用场了,我们在使用key时会先检查是否已过期。如果我们还是漏掉了很多过期的key,就会有很多过期key积压在内存,我们redis就会使用8种内存淘汰策略降低内存。我们在set key的时候可以设置key的过期时间,哪redis是怎么处理过期的key的呢?Redis中同时使用了。

2024-01-03 15:59:50 578 1

原创 什么是缓存击穿、缓存穿透、缓存雪崩?

但是如有有写请求进来的话,需要更新缓存,以保证缓存一致性,同时,最后给缓存设置适当的过期时间。在redis中,我们在使用缓存时一般都是:读请求来了,先查下缓存,缓存有值命中,就直接返回;缓存没命中,就去查数据库,然后把数据库的值更新到缓存,再返回。缓存击穿和缓存雪崩看着有点像,区别是,缓存雪崩是指数据库压力过大甚至宕机,缓存击穿只是大量并发请求到了DB数据库层面。但我们如果有一个一定不会存在的数据呢?缓存中数据大批量到过期时间,而查询数据量巨大,请求都直接访问数据库,引起数据库压力过大甚至宕机就是。

2024-01-03 15:37:04 401 1

原创 L1-035 情人节

以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。

2023-12-24 23:50:04 317

原创 L1-034 点赞

如果有并列,则输出编号最大的那个。

2023-12-24 23:49:19 373

原创 L1-032 Left-pad

根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的模块,就是这个模块把javascript里面的React/Babel干瘫痪了。这是个什么样的模块?就是在字符串前填充一些东西到一定的长度。例如用去填充字符串GPLT,使之长度为10,调用left-pad的结果就应该是******GPLT。Node社区曾经对left-pad紧急发布了一个替代,被严重吐槽。下面就请你来实现一下这个模块。

2023-12-24 23:48:30 320

原创 L1-027 出租

下面是新浪微博上曾经很火的一张图:一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index数组就是arr数组的下标,index[0]=2对应arr[2]=1index[1]=0对应arr[0]=8index[2]=3对应arr[3]=0,以此类推…… 很容易得到电话号码是。本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。

2023-12-17 22:36:35 355 1

原创 L1-023 输出GPLT

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

2023-12-17 22:13:28 332 1

原创 L1-011 A-B

本题要求你计算A−B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。

2023-12-17 22:12:00 356 1

原创 L1-009 N个数求和

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

2023-12-10 21:59:27 432 1

原创 L1-006 连续因子

一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

2023-12-10 21:55:14 382 1

原创 spring的aop的使用情景有哪些,简述其实现原理

aop就是切面编程,spring的很多功能都基于这个实现的,比如spring的缓存管理、spring的权限管理和spring的事务管理等等全都是靠aop这个切面编程来实现的。我们还可以使用spring实现访问控制,比如我们的权限接口大多数都是基于aop的,用户在调用我们的某些资源是可以校验是否有权限,我们的权限的底层就是使用的aop。最后还有spring的缓存管理,我们去访问一些数据的时候可以从缓存中提取,我们想要的是啥就不用一个一个拿了,只需就统一的拦截统一的给就行了。

2023-12-04 21:15:02 294

原创 PTA L1-005 考试座位号

每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。

2023-12-03 11:32:55 459 1

原创 面试题08 写一个基于线程安全的懒加载单例模式

显然是没有的,我们如果多线程同时调用这个方法,instance就会创建多遍,我们最简单的方式就是加synchronized锁,如下图,可能有人会好奇为什么要在锁里还要判断一便instance==null,这是因为我们在多线程访问时,它们一开始会同时进入if里,但我们加了锁,所以第二个线程会等第一个线程执行完,但当第二个线程拿到锁后它不知道创建了,所以我们只是实现了一次一个线程,没实现重复创建多个实例,所以我们还要再锁里加判断。接下来要创建要调用的方法,这样后就不能直接new了。接下来我们创建懒加载的实例。

2023-12-03 11:20:30 357 1

原创 面试题07 mysql中事务的实现原理

我们在多并发一段数据的时候,但事务还没有提交,此时数据是可读的,所以我们有Read View控制那些数据时可读的和那些是不可读的,不同的事务隔离级别中,当有事物在执行过程中修改了数据(更新版本号),在并发事务时需要判断一下版本链中的哪个版本是当前事务可见的。lnnoDB使用回滚段中的信息来执行事务回滚所需的撤消操作,它还使用这些信息构建行的早期版本,以实现一致的读取。mysql通过mvcc来实现多版本的事务的控制,它主要通过Read View控制的就是有哪些数据是可以被用户访问到的。

2023-12-03 10:19:48 321 1

原创 面试题06 jvm原理

我们在new对象的时候会在新生代中产生很多垃圾,这里面垃圾可以使用我们之前讲过的复制清除算法,但老年代中的数据常年积攒,满的时候就触发g1操作,但是老年代的心理是非常慢的,在这个清理的过程会产生stw操作,产生这个操作会除了清理垃圾的线程之外的线程全部暂停,所以我们要尽量减少这段时间,g1就可以解决这些问题,通过可达性算法可知查找是非常缓慢的,所以我们将查找和用户线程并行,这样的时候我们就只用stw一段时间用来删除这些找到的垃圾。那么,虚拟机的运行过程是怎么样的呢?5.不同的垃圾回收器。

2023-12-01 11:24:34 317 1

原创 面试题05 什么是Spring 的依赖注入?有哪些方法进行依赖注入

依赖注入有两种,就是Ioc(Inversion of Control)和DI(Dependeency Injection)两种,Ioc是控制翻转,本来是我们控制某些代码和程序,我们后面给spring管理就是控制反转,DI是依赖注入,它是有Ioc控制的,依赖注入是指将依赖的对象实例交给spring帮我们注入 管理,从而释放对对象的管理权,比如可以统一替换接口的实现,更高效的开发程序。3.autowire 自动注入。

2023-11-30 20:49:00 381

原创 面试题04 数据库索引的原理?创建索引的缺点是什么,什么情况索引失效?优化数据库的方法有哪些?

以下图为例,上面为根节点,下面为叶子节点,在b+树中,每个节点大小是固定的,节点中会存放键值,键值又分为主键值和非主键值,主键值就是我们创建表的时候的ID,它会把这个ID存放到叶子中用于二分查找,如果是非主键值的话就不是用这个二分查找,而是类似于我们的字段username这种作为索引,将这里面的值写到叶子当中,接下来,我们已主键的索引为例,一个表可以建立多个索引,默认它一定会一个索引,就是主键索引,这个索引在创建表的时候就创建好了,在我们写入数据的时候,会将这个索引从根节点开始给它分配它需要存在哪里。

2023-11-30 18:09:51 407

原创 面试题03 springboot 是如何管理版本依赖的?什么是自动配置、起步依赖?

大多数的发明都是为了让人们更好的偷懒所发明的,自动配置也是如此,所加载使用的iar包 如果是比较常见的,spring都提供了默认配置,也就是不像以前一样需要把框架的每一个属性都要配置一编,主要目的是为了简化开发那springboot是怎么实现自动配置的呢?下图是一个springboot的启动类,实现自动配置的密码就在@SpingBootApplication这个注解上。

2023-11-29 19:58:28 1775

原创 面试题02 JVM 内存模型中,为什么要区分新生代和年老代,对于新生代,为什么又要区分eden 区survial区?

新生代中一般保存新出现的对象,所以每次垃圾收集时都发现大批对象死去,只有少量对象存活,便采用了复制算法,只需要付出少量存活对象的复制成本就可以完成收集。老年代中一般保存存活了很久的对象,他们存活率高、没有额外空间对它进行分配担保,就必须采用“标记-清理”或者“标记-整理”算法。简单来说,新生代占1/3堆空间,老年代占2/3堆空间,新生代的数据更新快,老年代的数据更新慢,一段时间后,将新生代中重要数据放入老年代中,新生代中剩下的数据被回收。

2023-11-29 09:39:00 389 1

原创 面试题01 mysql使用innodb引擎,请简述mysql索引的最左前缀如何优化orderby语句

如下图即为索引的左前缀,简单来说,我们创建的一个索引,这个索引中有多个字段,那么我们在使用这个索引时应遵循从左到右顺序使用,如上图的a,b,c字段,我们在使用是应为先a到b再到c的顺序,如果我们跳过了a,则整个索引将失效,如果我们想从a一步飞到c,那c将失效,因为我们跳过了b,并且在使用索引时应避免出现大于或小于等的范围,这会使后面的索引失效,在索引中也是可以使用like关键字的,但前提是%不能出现在查找字的前面,否则,此字段将变为范围,导致后面的索引失效。

2023-11-28 21:22:00 468

空空如也

空空如也

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

TA关注的人

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