面试
文章平均质量分 89
面试知识复习
Liu_Shihao
Null
展开
-
约瑟夫问题Java的三种解决办法
约瑟夫问题 : N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。二、解法二:链表构造链表结构,并将链表最后节点指向头结点。然后通过计数,删除节点,知道最后只剩下一个节点(一个next指针指向自己的节点)。三、解法三:递推法递推法分析可参考:约瑟夫环——公式法(递推公式)...原创 2022-06-19 00:25:48 · 3856 阅读 · 1 评论 -
Java IO及BufferedReader.readline()的Bug
文章目录IO流BufferedReader.readline()方法Bug源码IO流流 : 流是一组有序的,有起点和终点的字节集合,是对计算机中数据传输的总称。即数据在两个设备间的传输称为流,流的本质是数据传输。Java-IO流BufferedReader.readline()方法Bug错误代码: File testTxt = new File("/Users/LiuShihao/IdeaProjects/netty_demo/src/main/resources/test.txt");原创 2021-03-03 14:14:29 · 924 阅读 · 1 评论 -
Java集合
文章目录一、集合结构二、List2.1 ArrayList(有序、数组、查找更新效率高)2.2 Vector(数组、线程同步、效率低)2.3 LinkedList (有序、链表、添加删除效率高)三、Set3.1 HashSet(无序、去重)3.1.1 LinkedHashSet(插入顺序、去重)3.2 TreeSet(有序、去重)四、Map4.1 HashMap(数组+链表+红黑树)4.1.1 LinkHashMap(记录插入顺序)4.2 ConcurrentHashMap(线程安全、效率高)4.2.1原创 2021-03-02 17:45:39 · 195 阅读 · 0 评论 -
深入学习Java多线程(二)线程池的创建方式
文章目录一、并发与并行二、实现多线程的方式2.1继承Thread类2.2实现Runnable接口2.3使用Lambda表达式方式创建三、线程状态四、synchronized同步代码块4.1演示未同步代码4.2使用同步代码块一、并发与并行并行就是两个任务同时运行,就是甲任务进行的同时,乙任务也在进行。(需要多核CPU)。并发是指两个任务都请求运行,而处理器只能接受一个任务。比如我跟两个网友聊天,左手操作一个电脑跟甲聊,同时右手用另一台电脑跟乙聊天,这就叫并行。如果用一台电脑我先给甲发个消息,然后立刻原创 2020-12-18 18:24:18 · 205 阅读 · 1 评论 -
深入学习Java多线程(一)多线程的创建方式、线程的状态、sleep和wait、start和run和线程常用方法等
文章目录一、JAVA线程实现/创建方式并发与并行的区别1.继承 Thread 类2.实现 Runnable 接口3.Callable和Future实现有返回结果的多线程基于线程池的方式二、4种线程池1.newCachedThreadPool2.newFixedThreadPool3.newScheduledThreadPool4.newSingleThreadExecutor三、线程生命周期(状态)3.1 新建状态(NEW)3.2 就绪状态(RUNNABLE)3.3 运行状态(RUNNING)3.4 阻塞状原创 2021-02-23 16:29:42 · 464 阅读 · 2 评论 -
Netty权威指南(一)传统BIO模型、伪异步I/O模型
文章目录传统的BIO编程TimeServerTimeServerHandlerTimeClient演示BIO模型的弊端传统的BIO编程网络编程的基本模型是Clinet/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。在基于传统同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口,Socke原创 2021-02-22 16:58:03 · 285 阅读 · 0 评论 -
深入学习Redis_(四)Redis与Lua脚本
文章目录上一章一、Lua介绍1. 应用场景2. Linux安装Lua3. 简单了解LuaLua关键字定义变量Lua中的数据类型流程控制函数require 函数二、Redis整合Lua脚本原子性EVAL方法三、RedisTemplateLua整合Lua脚本构造脚本执行脚本第一种方式:脚本直接写在代码中,String类型第二种方式:脚本单独写在lua文件中四、 Redis分布式锁结合Lua脚本获得锁的lua脚本:释放锁的lua脚本:上一章深入学习Redis_(一)五种基本数据类型、RedisTemplate原创 2021-02-20 16:26:31 · 2710 阅读 · 3 评论 -
深入学习Redis_(三)事务、分布式锁、消息队列、延时队列等
文章目录上一章一、Redis事务示例1 正常执行:示例2 放弃事务:示例3 事务队列中存在命令性错误则所有命令都不会执行示例4 事务队列中存在语法性错误则其他正确命令会被执行,错误命令抛出异常。示例5 使用watch示例6 使用watch被打断二、分布式锁2.1 INCR方法2.2 SETNX方法2.2.1 加锁SETNX2.2.3 释放锁2.3 SET 方法2.4 定时任务重复执行2.5 避免用户重复下单三、分布式自增 ID四、Redis 实现消息队列五、Redis 实现延时队列上一章深入学习Redi原创 2021-02-19 16:21:58 · 2318 阅读 · 5 评论 -
RabbitMQ通过TTL和DLX实现延时队列
RabbitMQ实现延时队列一、介绍1.TTL如何设置TTL(2种方式):2.Dead Letter Exchanges二、实现延时队列的思路三、SpringBoot+RabbitMQ实现延时队列1.RabbitMQConfig配置类2.消费者类3.生产者测试一、介绍RabbitMQ本身是没有直接支持延迟队列功能,但是可以通过TTL和DLX模拟出延迟队列的功能。 通过RabbitMQ的两个特性来曲线实现延迟队列:Time To Live(TTL) 和 Dead Letter Exchanges(原创 2020-08-27 21:50:35 · 1354 阅读 · 5 评论 -
学习SpringBoot使用SpringSecurity(一)_表单登录、角色认证以及SpringSecurity导致CSS样式丢失问题
文章目录一、 环境准备导入依赖创建数据库准备页面index.htmlhome.htmlyml配置文件实体类数据访问层业务层业务层实现类二、UserDetailsService三、WebSecurityConfigBug CSS样式丢失一、 环境准备用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作。spring security的主要核心功能为 认证和授权,所有的权限架构也是基于这两个核心功能去实现的。 “认证”,是为原创 2020-11-09 21:11:38 · 850 阅读 · 0 评论 -
MongoDB的基本语法
文章目录一、介绍MongoDB的特点MongoDB的体系结构MongoDB 数据类型二、安装MongoDB三、语法1.选择和创建数据库2.插入与查询文档3.按条件查询4.返回指定条数数据5.修改文档6.删除文档7.统计条数8.模糊查询9.大于小于、and、or、in、nin、inc一、介绍MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰原创 2020-10-29 14:46:07 · 1806 阅读 · 0 评论 -
SpringBootMongoDB的基本使用
文章目录一、准备0.Docker安装MongoDB1.pom依赖2.yml配置文件3.主启动类二、代码实体类使用MongoRepository操作MongoDBServiceServiceImplController使用MongoTemplate 操作MongoDB三、BUGBug1 mongo无法远程连接Bug2 Dokcer容器内无法apt-get updateBug3查询未认证MongoDB的基本语法请点击:MongoDB的基本语法直接使用SpringBootMongoDB来操作MongoDB原创 2020-10-29 21:20:34 · 424 阅读 · 0 评论 -
深入学习Redis_(二)淘汰策略、持久化机制、主从复制、哨兵模式等
文章目录一、Redis为什么这么快二、Redis 六种淘汰策略三、 Redis 两种持久化机制3.1RDB快照持久化3.1.1 RDB工作原理3.1.2 RDB 的优点3.1.3 RDB 的缺点3.2 AOF3.2.1AOF的优点3.2.2 AOF的缺点3.3 如何选择AOF rewriteRedis 的「混合持久化」四、主从复制复制过程主从复制存在的问题五、哨兵模式哨兵的工作原理简单来讲六、分片集群:横向扩展_略一、Redis为什么这么快Redis 完全基于内存,绝大部分请求是纯粹的内存操作,非常迅原创 2021-02-18 17:09:30 · 941 阅读 · 1 评论 -
深入学习Redis_(一)五种基本数据类型、RedisTemplate、RedisCache、缓存雪崩等
Redis 是 C 语言开发的一个开源的(遵从 BSD 协议)高性能**键值对**(key-value)的内存数据库,可以用作`数据库`、`缓存`、`消息中间件`等。Redis是一种 NoSQL(not-only sql,泛指非关系型数据库)的数据库。Redis 作为一个内存数据库:1.性能优秀,数据在内存中,读写速度非常快,支持并发 10W QPS。2.单进程单线程,是线程安全的,采用 IO 多路复用机制。3.丰富的数据类型,支持字符串(strings)、散列(hashes)、列原创 2021-02-18 15:06:48 · 4100 阅读 · 18 评论 -
SpringBoot如何实现动态的定时任务
SpringBoot实现动态的定时任务一、介绍二、依赖三、定时任务配置类ScheduledConfig原理完整的配置类代码四、定时任务类五、JPA六、实体类七、yml配置文件八、主启动类九、启动测试缺点一、介绍SpringBoot项目中,创建定时任务除了使用@Scheduled 注解外,还可以使用 SchedulingConfigurer。@Schedule 注解有一个缺点,其定时的时间不能动态的改变,而基于 SchedulingConfigurer 接口的方式可以做到动态的定时任务。二、依赖因为原创 2020-08-28 20:43:08 · 4897 阅读 · 5 评论