自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 问答 (2)
  • 收藏
  • 关注

原创 面试问题记录

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。yield:声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。跳表,跳表是基于多指针有序链表实现的,可以看成多个有序链表。新建、可运行、阻塞、无限期等待、限期等待、死亡。3.explain语句里常见字段含义。1.Redis的数据类型。Daemon:守护线程。排行榜、缓存、分布式锁。sleep:休眠方法。1.数据结构:B+树。2.为什么选择B+树。

2023-08-17 23:14:50 337

原创 深度学习环境安装记录

首先安装了ubuntu16.04系统,然后依次安装CUDA8.0+cuDNN6.0+Anaconda3-4.2.0+TensorFlow1.4.0+ Keras2.0.8,其中Anaconda3-4.2.0对应python3.5.21. ubuntu16.04系统1.1 在windows10系统下创建空白磁盘分区预留了100G的空白磁盘分区,如果一个盘留不出较大的内存,可以将其它盘分一点过来,这部分的操作,使用DiskGenius软件非常方便,后面如果安装出现问题,要删除ubuntu系统,也要用到.

2022-01-10 20:39:58 896

原创 生产者消费者问题

问题描述给定一个容器,设计两个线程,一个负责生产,一个负责消费,保证容器为空时,停止消费,容器满了之后,停止生产。方法一(synchronized)1.解题思路当容器满了之后,producer阻塞,唤醒consumer进行消费。当容器为空时,consumer阻塞,唤醒producer进行生产。2.代码实现public class ProducerConsumer1<T> { final private LinkedList<T> lists = new Li

2021-08-18 12:47:19 181

原创 博客项目学习笔记二十六:增量数据同步到ES

博客项目目录: 请戳这里准备需求:用户登录后,发表新文章或者编辑文章,ES会创建或更新对应的文章索引,如果用户删除文章,ES也会删除对应的文章索引。基本思路:可以考虑使用rabbitmq来实现,首先配置rabbitmq,将队列和交换机绑定起来。然后在程序中建立监听者,当用户发表或编辑文章时(删除文章时类似),就会收到新建或更新文章索引的消息,然后对应的消费者根据消息,进行对应的处理。1.添加依赖包,修改yml配置RabbitMq相关依赖用于整合RabbitMq,项目启动时,需要事先安装Ra

2021-07-31 12:58:29 355

原创 博客项目学习笔记二十五:搜索引擎开发

博客项目目录: 请戳这里准备需求:用户登录后,点开搜索框,输入搜索内容,回车之后,就会跳转到对应的搜索页面基本思路:首先将所有的文章信息查询出来,同步到elasticsearch中,然后通过es进行搜索,得到对应的文档,之后转化成MyBatis的page信息,显示在前端页面1.添加依赖包,修改yml配置es相关依赖用于整合elasticsearch,项目启动时,需要事先安装es,并开启es服务modelmapper用于将MyBatis查询到的记录转化为es的Docment

2021-07-21 00:15:15 883 6

原创 容器并发控制

问题描述设计一个容器,有add和size两个方法,然后有两个线程,一个线程往容器里加10个数,另一个线程用来控制第一个线程,当加到5个数时,线程停止,让第一个线程继续加数方法一(Synchronized)1.解题思路直接在类里定义一个list,提供add()和size()两个方法。主方法new两个线程t1和t2,当容器数字个数不为5时,t2线程阻塞。这段时间,t1线程不断执行add()方法,当达到5个数后,t1唤醒t2,自己进入阻塞状态。t2被唤醒后,打印“t2停止”,然后又唤醒t1线程,添加

2021-07-19 19:53:50 112

原创 两个线程交替打印奇偶数

问题描述设计两个线程,打印1-10,一个线程打印奇数,另一个线程打印偶数,要求交替打印。 最后输出123……10方法一(Synchronized+共享变量)1.解题思路新建一个对象,并定义一个共享变量。只要flag不为1,线程t2就会阻塞,释放锁资源,所以t1线程先执行,此时flag为0,跳过while判断,然后修改flag为1,打印奇数,并唤醒t2,由于flag被改为1,下次循环,t1就会阻塞。t2被唤醒后,t1已经释放了锁资源,所以t2可以获取锁资源,并且flag为1,跳过while循环,修

2021-07-08 13:04:15 2683 2

原创 博客项目学习笔记二十四:评论文章,消息即时通知

博客项目目录: 请戳这里准备需求:用户登录后,进入文章详情页,输入评论,点击提交回复,即可评论帖子,同时即时通知文章的作者,如果有@其他用户,还会即时通知被@的人基本思路:首先完成评论功能,然后通过websocket建立一个通道,进行点对点传输,利用STOMP协议传输基于代理的消息,stomp客户端会订阅与当前账户绑定的通道,只要当前账户有新的未读消息,客户端就会将消息推送给当前用户1.添加Controller层评论帖子首先进行特殊情况判断,比如id对应的文章是否存在,评论内容是否

2021-07-01 01:19:54 434 2

原创 eureka实例名变为前缀是设备名的问题

解决办法1.重启电脑2.跟新maven依赖

2021-06-28 21:52:04 133

原创 博客项目学习笔记二十三:删除帖子,设置超级管理员

博客项目目录: 请戳这里准备需求:用户登录后,进入自己发表的文章,点击删除,即可删除帖子,除此之外,设置一个超级管理员,管理员除了能删除帖子,还有置顶和加精的权限1.修改detail.ftl #--发布者删除--> <#if post.userId == profile.id> <span class="layui-btn layui-btn-xs jie-admin" type="del">删除</span> </

2021-06-24 22:18:21 451

原创 实现对数器

1.对数器作用解决某个算法问题时,已知一个较高复杂度的算法(可能是暴力解法),判断某个较低复杂度的算法是否正确。2.实现思路先实现一个随机数组生成器,生成指定范围内随机长度,随机数值的数组然后将原数组复制一份原数组用较高复杂度算法测,复制数组用较低复杂度算法测判断两次的结果是否一致随机数组生成器分析:Math.random()是[0,1)范围的一个随机数,所以(N+1)*Math.random()是[0,N+1)的一个随机数,再取整,就是[0,N]范围的一个随机数。(int) ((N

2021-06-23 20:29:04 134

原创 博客项目学习笔记二十二:发表博客,全局异常处理

博客项目目录: 请戳这里准备需求:用户登录后,点击发表新帖,会进入如下界面,选择专栏,输入标题和内容,即可发表博客,并且后台post表会新增一条记录当出现异常时,会跳转到统一的错误界面,并输出异常信息1.添加edit.ftl将\fly-3.0\html\jie下的add.html添加到post包下,并且重命名为edit.ftl,提取出container部分,套在模板里面,保留“jie”的js2.PostController添加edit方法 @GetMapping("/post/edit

2021-06-21 12:47:46 122 1

原创 博客项目学习笔记二十一:收藏帖子

博客项目目录: 请戳这里准备需求:用户登录后,点击帖子,进入详情页。点击收藏,按钮会变为取消收藏,表示帖子已被收藏,点击取消收藏,按钮又会变回收藏,表示帖子已从收藏表移除。1.在category.ftl和detail.ftl添加对应js <script> layui.cache.page = 'jie'; </script>这个js会触发res包下的jie.js对应js代码://异步渲染 var asyncRender = function(

2021-06-19 19:39:32 191

原创 排序算法总结

冒泡排序1.算法思路从后往前,两两进行比较,将较小的元素移动到数组靠前的位置,循环这个过程,直到所有的元素按从小到大的顺序排列2.代码实现public class Sort { //冒泡排序,从后往前,将较小值一个一个往前面冒 private void bubbleSort2(int[] nums) { int n = nums.length; for (int i = 0; i < n - 1; i++) { for

2021-06-15 18:21:50 81

原创 博客项目学习笔记二十:我的消息(删除消息以及未读消息提示)

博客项目目录: 请戳这里准备需求:用户登录后,如果有未读消息,会在右上角提示,进入我的消息页面,点击删除,可删除对应消息。删除消息1.在controller层添加对应方法传入一个消息id和一个all标记变量(默认为false),当id为当前id,并且用户为当前账户时,如果all为false,删除当前消息;如果为true,删除全部消息。 //删除消息 @ResponseBody @PostMapping("/message/remove/") public Result

2021-06-15 11:04:45 313

原创 博客项目学习笔记十九:我的消息

博客项目目录: 请戳这里准备需求:用户登录后,进入我的消息页面,显示如下消息信息,分为系统消息,评论文章的消息,评论评论的消息。1.在controller层添加对应方法根据当前账户id,判断是否为to_user_id,如果相等,则返回查到的消息,并将消息页面分页。 //我的消息 @GetMapping("/user/mess") public String mess() { IPage<UserMessageVo> page = messageSe

2021-06-13 18:27:17 168 2

原创 剑指offer-面试题68-II:二叉树的最近公共祖先

题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5

2021-06-11 13:27:44 114

原创 剑指offer-面试题68-I:二叉搜索树的最近公共祖先

题目描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节

2021-06-10 21:37:51 95

原创 剑指offer-面试题66:构建乘积数组

题目描述给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i]的值是数组 A 中除了下标 i 以外的元素的积, 即B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000方法一(分组递推)1.解题思路B[i]=A[0]×A[1]×…×A[i-1

2021-06-10 00:06:08 133

原创 剑指offer-面试题67:把字符串转换成整数

题目描述写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。注意:假如该字符串中的第一

2021-06-09 00:21:38 228 4

原创 实现LRU缓存

题目描述运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类:LRUCache(int capacity) :以正整数作为容量 capacity 初始化 LRU 缓存int get(int key):如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value):如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它应该在写

2021-06-06 23:45:52 252 2

原创 剑指offer-面试题65:不用加减乘除做加法

题目描述写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0 结果不会溢出 32 位整数方法一(位运算+递归)1.解题思路首先需要了解数电中的二进制相加原理,这个题的计算,相当于一个简单的半加器。比如a,b都用二进制表示,用一位二进制数表示a,b,sum为和,carry为进位。则真值表如下:absumcarry00000

2021-06-06 00:32:35 94

原创 解决java的非法字符: ‘\u200b‘的问题

1.将原代码拷贝到notepad++public class HelloFiber { public static void main(String[] args) throws Exception { long start = System.currentTimeMillis(); Runnable r = new Runnable() { @Override public void run() {

2021-06-03 18:52:28 3019

原创 剑指offer-面试题64:求1+2+……+n

题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000方法一(递归+开关特性)1.解题思路boolean flag=A&&B,如果A条件不成立,则flag直接为false,B不会执行。所以可以利用这个特点设置递归的终止条件,当n为1时,不再满足n&g

2021-06-03 16:36:55 180

原创 博客项目学习笔记十八:用户中心(我收藏的帖子)

博客项目目录: 请戳这里准备需求:用户登录后,进入用户中心页面,显示如下信息,当点击“加载更多”,会把当前页的下一页加载出来。1.在controller层添加对应方法根据当前账户id,在收藏表进行查询,得到收藏文章的id,再根据这些文章id从文章表取出对应的文章。 //我收藏的帖子 @ResponseBody @GetMapping("/user/collection") public Result collection() { IPage page =

2021-06-03 11:20:26 222

原创 剑指offer-面试题63:股票的最大利润

题目描述假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <= 数组长度

2021-06-02 17:35:06 67

原创 博客项目学习笔记十七:用户中心(我发布的帖子)

博客项目目录: 请戳这里准备需求:用户登录后,进入用户中心页面,显示如下信息,当点击“加载更多”,会把当前页的下一页加载出来。1.引入index.ftl与mess.ftl从fly-3.0\html\user目录下,将index.html和message.ftl拷贝到项目user目录下重命名为index.ftl和mess.ftl2.将layout模板填充到index.ftl和mess.ftl3.提取左边侧边栏到common.ftl设置一个level标签,当level为0时,“我的主

2021-06-01 15:15:53 203

原创 剑指offer-面试题62:圆圈中最后剩下的数字

题目描述0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2限制:1 <= n <= 10^51 <= m <

2021-05-31 18:48:54 548

原创 剑指offer-面试题61:扑克牌中的顺子

题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为0 ,可以看成任意数字。A 不能视为 14。示例 1:输入: [1,2,3,4,5]输出: True示例 2:输入: [0,0,1,2,5]输出: True限制:数组长度为 5数组的数取值为 [0, 13]方法一(排序+计数)1.解题思路首先将数组排序,然后统计0的数目和数字间的间隔数,如果数组中有非0重复数字,则直接返回false

2021-05-30 11:53:46 94

原创 剑指offer-面试题60:n个骰子的点数

题目描述把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率。示例 1:输入: 1输出:[0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]示例 2:输入: 2输出:[0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.1111

2021-05-27 18:29:58 180

原创 剑指offer-面试题59-II:队列的最大值

题目描述请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1示例 1:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”][[],[1],[2],[],[],[]]输出: [null,null,null,2,1,

2021-05-26 14:11:11 76

原创 剑指offer-面试题59-I:滑动窗口的最大值

题目描述给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:提示:你可以假设 k 总是有效的,在输入数组不为空的情况下,1 ≤ k ≤ 输入数组的大小。方法一(双端队列)1.解题思路定义一个双端列队,不断地从数组将元素入队,如果当前元素大于队尾元素,则弹出队尾元素(目标是保持队首元素是队列中最大值)。当下标到k-1之后,要判断队列中元素

2021-05-25 13:26:42 85

原创 剑指offer-面试题58-II:左旋转字符串

题目描述字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例 1:输入: s = “abcdefg”, k = 2输出: “cdefgab”示例 2:输入: s = “lrloseumgh”, k = 6输出: “umghlrlose”限制:1 <= k < s.length <= 10000方法一(字符串截取)

2021-05-24 20:21:42 81

原创 剑指offer-面试题58-I:翻转单词顺序

题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输出: “world! hello”解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: “a

2021-05-23 12:40:56 89

原创 剑指offer-面试题57-II:和为s的连续正数序列

题目描述输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。示例 1:输入:target = 9输出:[[2,3,4],[4,5]]示例 2:输入:target = 15输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:1 <= target <= 10^5方法一(滑动窗口)1.解题思路维护一个头是start,尾是end的滑动窗口,起初start为

2021-05-22 12:38:06 147

原创 剑指offer-面试题57-I:和为s的数字

题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。示例 1:输入:nums = [2,7,11,15], target = 9输出:[2,7] 或者 [7,2]示例 2:输入:nums = [10,26,30,31,47,60], target = 40输出:[10,30] 或者 [30,10]限制:1 <= nums.length <= 10^51 <= nums[i] <= 1

2021-05-22 11:57:47 60

原创 剑指offer-面试题56-II:数组中数字出现的次数

题目描述在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例 1:输入:nums = [3,4,3,3]输出:4 示例 2:输入:nums = [9,1,7,9,7,9,7]输出:1限制:1 <= nums.length <= 100001 <= nums[i] < 2^31方法一(位运算)1.解题思路首先新建一个位数组,遍历nums数组中的每一个数的每一位,如果某一位是1,就加入到对应的位数组,由于其他

2021-05-21 14:14:36 91

原创 剑指offer-面试题56-I:数组中数字出现的次数

题目描述一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]输出:[2,10] 或 [10,2]限制:2 <= nums.length <= 10000方法一(计数)1.解题思路直接统计数组中每个数出现的次数,将出现一次的加入结果数组。思路比较简单,但是空间复杂度高。2.代码

2021-05-19 13:49:28 84

原创 博客项目学习笔记十六:基本设置(密码修改)

博客项目目录: 请戳这里准备需求:用户登录后,鼠标悬停在用户部分,点击下拉菜单的基本设置,跳转到对应的页面,填写相应信息,可以修改密码。1.在controller层添加对应方法主要验证两个地方:1.输入的密码(nowpass)和用户的密码是否一致2.两次输入的新密码(pass和repass)是否一致验证完之后,用输入的新密码替换掉原来的密码,并跟新用户信息 //基本设置(密码修改) @ResponseBody @PostMapping("/user/repass")

2021-05-16 22:23:30 255

原创 博客项目学习笔记十五:基本设置(头像上传)

博客项目目录: 请戳这里准备需求:用户登录后,鼠标悬停在用户部分,点击下拉菜单的基本设置,跳转到对应的页面,点击上传头像,可以上传本地硬盘的图片,并替换掉原来的头像。1.修改layout.ftl首先注释掉layout.ftl部分代码,否则点击上传头像会没有反应,因为res/mods/user.js没有加载进来2.修改set.ftl将头像部分显示为后台的用户头像<div class="layui-form layui-form-pane layui-tab-item">

2021-05-16 22:06:27 332

空空如也

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

TA关注的人

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