自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛客-超级跳

要是为负的话,是Math.max(后一个数为负状态的值,后一个数为正状态的值加上这个负数的值),要是为正的话,是Math.max(后一个数为正状态的值,后一个数为负状态的值加上这个正数的值)。最后是cache[0][1],因为第一个状态一定是正数状态。链接:https://www.nowcoder.com/questionTerminal/2ae94400de4e409c91c3470a95681bfc。初始的时刻是从1开始的,Abby初始的弹跳能力是0,当然我们的Abby总想尽可能的跳的高一些。.....

2022-08-27 20:52:58 437 1

原创 18、优化网站性能

LoadingCache是同步缓存,AsyncLoadingCache可以实现异步、并发。本地缓存适合与用户无强关联的信息,Redis可以缓存与用户强关联的信息(如登录凭证),可以跨服务器,但比本地缓存稍微慢些。数据变化频率相对较低的数据比较使用于缓存。将热门帖子列表缓存到本地缓存中。缓存数据的更新一般有两种方式1、数据发生更新2、缓存到了过期时间。一级缓存(本地缓存)>二级缓存(分布式缓存)>DB。使用Caffeine缓存帖子列表和总的行数。3、优化业务方法,一般是优化Service。......

2022-08-01 00:15:54 403

原创 17、生成长图,并上传至服务器

Runtime.getRuntime().exec(cmd) 服务器把定义的cmd命令交给操作系统后,便继续向下执行了,即异步。3、服务器端生成长图检查并创建目录将指定 url 生成长图,用于分享A、share 方法是用来生成长图的,并返回一个json字符串,如果成功,则code=0,分享url即是json中"shareUrl"的值。1)生成图片是异步的方式,使用kafka在 消费TOPIC_SHARE 方法里,使用 wkhtmltopdf 生成长图,并放在指定的本机文件夹中。B、用户访问 “

2022-08-01 00:10:53 411

原创 16、热帖排行

A)发新帖时,将帖子id放入Redis(给帖子一个初始分数)RedisKeypostId存放在Set里。2、所有调用selectDiscussPosts的地方进行修改。1)thhref超链接修改,传入orderMode参数。2)由orderMode参数决定是否有active参数。B)加精、评论、点赞操作时,也将帖子放入Redis。2、影响帖子分数操作发生时,将帖子放入Redis。1、按照最热对帖子进行排序。1、生成RedisKey。对Quartz进行配置。...

2022-07-31 00:53:12 438 1

原创 15、网站统计数据

UV(Unique Visitor)2、Service由于使用Redis存储数据,所以不需要访问DAO层,直接在Service层处理数据即可。DataService.java1、将指定IP计入UV通过new SimpleDateFormat(“yyyyMMdd”) 先指定日期格式2、统计:统计指定日期范围1)传入的日期参数,是Data类2)由于要统计日期范围内的数据,所以要生成一组Rediskey:List< String> keyList,其中用到了Calendar类对日期进行循环3)合并

2022-07-31 00:32:07 277

原创 13、使用Spring Security进行权限控制

2、配置Security,主要是对授权的配置,(认证使用的是原来的认证方案,没有对登录认证进行相关配置);普通的拦截器,通过实现HandlerInterceptor接口实现拦截器,通过实现WebMvcConfigurer接口实现一个配置类,在配置类中注入拦截器,最后再通过@Configuration注解注入配置。2、LoginTicket拦截器在请求一开始就会判断凭证,可以在此时对用户进行认证,并构建用户认证的结果,存入SecurityContext,以便于Security进行授权。3、异步请求时的处理。.

2022-07-30 23:14:50 2975

原创 14、Elasticsearch开发搜索功能

Field(type=FieldType.Text,analyzer=“ik_max_word”,searchAnalyzer=“ik_smart”),type参数是文档中字段的类型,FieldType.Text会进行分词并建立索引的字符类型;analyzer=“ik_max_word”指定存储时的解析器,尽可能多的进行分词;在发布帖子和增加评论时,由生产者提交给消息队列,再由消费者异步处理,将帖子信息保存在搜索引擎Es服务器中。@id表示文档的id,文档类似数据库表中的行。...

2022-07-30 15:25:06 726

原创 12、Kafka发送通知和消费通知(点赞、评论、关注、发帖等各种操作)

代码】12、Kafka发送通知和消费通知(点赞、评论、关注、发帖等各种操作)

2022-07-30 12:36:41 1335

原创 11、Redis实现关注、取消关注以及关注和粉丝列表

代码】11、Redis实现关注、取消关注以及关注和粉丝列表。

2022-07-30 00:19:38 1563

原创 10、Redis实现点赞(Set)和获取总点赞数

不用写数据访问层,直接在Service层写即可。保证事务性,一次点赞两处增加,编程式事务。查询某个用户获得的赞的总数。

2022-07-29 23:52:25 1369 1

原创 9、统一记录日志(AOP)

AOP,即面向切面编程,切面是一个一个组件。只需要对切面组件编程即可,不需要再进到业务Bean中取改,提高了编程效率。**为什么要代理**在织入切面代码时,不在原来的实例中织入,而是在代理对象中织入。调用时也是掉哟个代理对象,而不是调用原始对象。容器调用对象,如果有AOP作用,就调用代理对象。前者生成接口的实现类,在代理实例中织入,要求必须有业务接口;后者在业务不存在接口时,创建子类实例以实现代理。框架为切面提供了织入的功能,有编译时(运行快),类装载,运行时织入(慢些)。...

2022-07-29 21:40:31 457

原创 8、统一处理异常(控制器通知@ControllerAdvice全局配置类、@ExceptionHandler统一处理异常)

在Controller下新建advice通知配置包,新建ExceptionAdvice。

2022-07-27 00:22:06 729

原创 7、私信列表

代码】7、私信列表。

2022-07-26 18:18:34 111

原创 6、显示评论和回复

注入page,post,user,comments。帖子详情页,有评论,评论中有回复。CommentMapper接口。

2022-07-26 15:39:03 204

原创 5、发布帖子(异步通信技术AJAX)

异步请求增量更新在页面上,不用刷新整个页面。通过jQuery写,三个参数访问路径,发送的JSONString字符串,回调函数(参数是服务器返回值)使用jquery使得发送操作简单直接,对XMLHttpRequest进行了封装,要不就是通过XMLHttpRequest发送。...

2022-07-26 14:47:03 153

原创 4、敏感词过滤(前缀树)

前缀树的数据结构,util包下的SensitiveFilter.java。主要有两个成员变量,关键词结束标志和子节点,在节点的数据结构中建立hashmap用于存储结构。//关键词结束标志privatebooleanisKeywordEnd=false;//子节点(key是下级字符,value是下级节点)privateMapsubNodes=newHashMap(16);}/***添加子节点*...

2022-07-26 14:21:25 645

原创 LeetCode热题 HOT52-100

我们进行广度优先搜索时,每次保存上一轮搜索的结果,然后对上一轮已经保存的结果中的每一个字符串尝试所有可能的删除一个括号的方法,然后将保存的结果进行下一轮搜索。所以就比较第k-1个房间的dp值,和第k-2个房间的dp值加上第k个房间的值。两重for循环,第一次for循环是循环nums的每一个i,第二次for循环是循环nums中的每个小于i的所有数j。dp[i,j]的意思是在数组i到j的范围内,k为分割戳点的左右加自身的最大数量。广度优先搜索,每一轮都删除字符串中的1个括号,直到出现合法匹配的字符串为止。...

2022-07-22 16:37:00 195

原创 3、上传头像到七牛云并显示

在设置中,更换头像,上传到七牛云,并显示新头像。controller:前端:单击表单提交时,由JQuery异步将数据按照设置信息传给云服务器(即客户端上传到云服务器)。上传成功会更新图像路径js:数据库中更新头像路径:...

2022-07-14 18:19:00 308

原创 2、登录——验证码功能以及保存登录状态

在登录界面,主要实现两个功能,刷新验证码和记住我功能使用kaptcha生成验证码,导入jar包,编写对应的config配置类,然后在controller中生成验证码。新建cookie,在cookie中放入验证码的uuid,将cookie作为key存入redis,把text作为value,在添加过期时间。通过response.addCookie(cookie)把cookie发送给前端,OutputStream os = response.getOutputStream(); ImageIO.write

2022-07-14 17:35:09 809

原创 1、登录——邮件发送激活链接

我们在这里输入账号、密码、邮箱后,后端的service层会判断账号、邮箱是否已被注册。如果没有,则会向邮箱中发送激活链接在我们点击注册按钮之后,在service层中存入数据库,然后通过数据库中用户的id,来生成激活链接(http://localhost:8080/activation/151/da46a96eaf1a41ec8168fca35a3aa17d)。系统将该链接发送到对应的邮箱中:通过**String content = templateEngine.process(“/mail/activat

2022-07-13 18:56:00 1097

原创 Linux启动Kafka

/opt/monitor/kafka/kafka_2.12-3.2.0

2022-07-05 00:19:18 2321

原创 LeetCode热题 HOT1-51

经典两数之和,可以通过暴力枚举解决(时间复杂度O(n^2)),当然也可以通过哈希表,hashtable.containsKey(),来选择判断x和target-x2、两数相加遍历两个链表,逐位计算它们的和

2022-06-21 16:18:29 202

原创 个人博客网站——使用Markdown编辑器,发布浏览博客文章

作为博客文章最基本的功能,我们要能够编辑md文本,这里的网站成品如下:博客文章重点html:这里的markdown编辑器使用的是开源的Editor.md编辑器,直接导入它的js、css,设置好div的id,通过js函数调用即可。<div class="required field"> <div class="" id="md-content" style="z-index: 1 !important;"> <textarea placehold

2022-04-15 21:42:43 1843

原创 经典回溯算法+回头——77. 组合

明显的回溯和递归的区别:回溯是这个状态走完之后,回到上一个状态去,继续寻找下一个状态;递归是这个此时的这个状态会用到上一个状态的结果。这道题是经典的回溯+回头的题class Solution { public List<List<Integer>> combine(int n, int k) { List<List<Integer>> list = new ArrayList<>(); List<

2022-04-15 20:32:23 300

原创 个人博客网站——留言及多级回复功能

通常情况下,在博客网站中,无论是文章下的评论还是单独的留言,都会有多级的回复功能。这里我们主要介绍多级回复功能的留言实现。新增留言在这里的新增留言,由留言板块、姓名板块和邮箱板块组成,其中隐藏获取了用户的电脑和浏览器内核版本。<!--新增留言--> <div id="message-form" class="ui form"> <input type="hidden" name="parentMessage.id" value="

2022-04-13 21:40:15 4350 6

原创 汽车售票系统——邮箱发送订单信息

通过邮箱的SMTP协议,获取qq邮箱中的smtp密钥后,就可以实现,我这里是发送的用户的订单信息。首先要导入maven包<!--javax.mail--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>然后在spring

2022-04-11 21:11:35 1049

原创 人脸识别SDK调用与分析

该demo时是基于springboot的人脸识别和后期判断的小项目,利用的是第三发的虹软人脸识别的SDK。下面主要展示页面功能:照相或照片的方式解析图片,提取特征;照相或照片的方式对比图片,判断相似度;在引入相关的依赖后和输入想过的appid和sdk key后,我们主要对调用sdk识别的代码进行分析1、JS调用摄像头拍照,或从本地文件上传将照片或者照片文件转化为64位编码,向后端传送 function getMedia() { $("#mainDiv").empty();

2022-04-09 21:39:44 3410

原创 汽车售票系统——短信验证码实现注册,Redis存储

首先需要导入腾讯云短信验证、Redis的依赖,开启腾讯云短信服务。我们要实现的用户注册界面大致如下:本项目中主要使用ajax进行数据交互注册的html代码:<form class="m-t" role="form" action="login.html"> <div class="form-group"> <input type="text" class="form-control" placeh

2022-04-07 21:21:41 235

原创 汽车售票系统——分页查看所有车次

我们要实现对车次信息的查询,主要用到的是mybatis的分页插件pagehelper,ajax。下面是我们分页查询的最终页面:其中有三个分页的功能:对车次的详细信息进行分页,显示查询结果。左下角,显示当前第几页,总共第几页,总共多少个车次。底部中央,首页、1、2、n、末页的实现。先看一下html,我这里是用的ajax传值,所以这里的车次等数据都在js文件的函数里面。<!--显示表格数据 --> <div class="ro

2022-04-07 20:20:53 415

原创 矩阵元素最近距离(动态规划 或 BFS)

给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。两个相邻元素间的距离为 1 。BFS广度优先搜索class Solution { public int[][] updateMatrix(int[][] mat) { Queue <int[]> queue = new LinkedList<>(); int m = mat.length;

2022-04-04 17:23:24 683

原创 矩阵中的路径(dfs+剪枝、bfs)

class Solution { public boolean exist(char[][] board, String word) { char[] words = word.toCharArray(); for(int i=0;i<board.length;i++){ for(int j=0;j<board[0].length;j++){ if(dfs(board, words, i, j, 0.

2022-03-31 20:50:49 828

原创 最长不含重复字符的字符串(动态规划)

滑动窗口+数组class Solution { public int lengthOfLongestSubstring(String s) { int[] last = new int[128]; for(int i=0;i<128;i++){ last[i] = -1; } int res = 0; int start = 0; for(int i=0;i<s.l.

2022-03-31 16:18:21 794

原创 滑动窗口和双指针问题

滑动窗口滑动窗口的最大值class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length==0){ return nums; }else{ //次数 int count = 0; //输出窗口长度 int length = nums.length

2022-03-31 15:25:15 298

原创 经典排序算法

目录:1、冒泡排序2、快速排序3、归并排序桶排序1、冒泡排序void bubbleSort(int[] nums) { int N = nums.length; for (int i = 0; i < N - 1; i++) { // 外循环 for (int j = 0; j < N - i - 1; j++) { // 内循环 if (nums[j] > nums[j + 1]) { // 交换 nums[j],

2022-03-24 21:14:11 969

原创 二叉树上面的DFS遍历和BFS遍历总结

DFS遍历使用递归:void dfs(TreeNode root){ if(root == null){ return; } dfs(root.left); dfs(root.right):}BFS遍历使用队列数据结构void bfs(TreeNode root){ Queue<TreeNode> queue = new ArrayDeque<>(); queue.add(root); while(!queue.isEmpty()){ TreeNode

2022-03-23 10:00:07 401

原创 Java编程题中常用api

//StringString s;char ch = s.charAt(i); //得到s中的第i个字符s.toCharArray(); //将字符串转换为字符数组StringBuffer res = new StringBuffer();res.append(ch); //添加字符res.toString(); //转换为String类型//哈希表Map<Charactor,Integer> fre = new HashMap<Charactor,Integer&

2022-03-22 21:51:15 624

原创 二叉树问题

1、二叉树的前序遍历前序遍历的输入顺序为:A-B-D-F-G-H-I-E-C递归法class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<Integer>(); pre(root,list); return list; } //前序遍历

2022-03-22 21:25:48 914

原创 53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。class Solution { public int maxSubArray(int[] nums) { int m=0; int n=nums[0]; for

2022-03-14 23:33:23 370

原创 JS实现鼠标点击特效,五颜六色的小球绽放

一个蛮好看的点击特效,复制直接放在模板顶部文件就可以用。js代码:(function (win, doc) { "use strict"; var defaultParams = { colors: ['#eb125f', '#6eff8a', '#6386ff', '#f9f383'], size: 30, maxCount: 30 } function colorBall(params) { this.params = Object.assign({}, defaultPa

2022-01-23 00:34:50 2061 2

原创 linux 后台运行jar,即关闭界面程序可以后台运行

当前的命令默认会把日志输出到nohup.out文件中nohup java -jar XXX.jar &指定输出文件nohup java -jar XXX.jar >log.out &增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024mjava -jar -XX:-UseGCOverheadLimit -Xmx2048m BKInsert.jar(1)ps查进程ID[user@data2 ~]$ ps -ef |

2022-01-18 14:48:07 634

空空如也

空空如也

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

TA关注的人

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