- 博客(49)
- 收藏
- 关注
原创 maven常用操作
将工作中用到的maven操作命令记录在这里。将根目录下生成的target文件移除mvn clean跳过测试,将项目本身编译并打包到本地仓库mvn install -Dmaven.test.skip=true打包上传mvn clean deploy -DskipTests --settings /Users/lingxi/apache-maven-3.6.3/conf/settings_hy.xml -pl routing-cost-client -am强制下载未下载完
2021-08-25 16:17:13
141
原创 Idea与maven相关问题吐血整理
Idea与maven相关问题吐血整理多模块找不到类Jar包未下载完全其它可能的方式多模块找不到类问题体现在多模块项目中找不到本模块或其他模块的类时解决方案mvn install parent模块或相关子模块说明作用是把这些模块加入到本地仓库后提供给其他模块使用Jar包未下载完全问题体现提示Cannot resolve XXXX…然后去本地仓库查看发现有包,但包里只有.lastUpdate文件,说明下载失败。解决方案mvn -U idea:idea说明强制idea继续下载。
2021-08-17 16:27:50
158
原创 Java的SPI机制
小白经历了人生中最虐的三个月后成功转正了,回想起来刚入职的时候连枚举都看的吃力真是菜的扣jio,无数次怀疑自己有没有选错行,虽然现在也没有答案,也不知未来可以干多久,但是大大说我们要干一行爱一行,至少我还不厌恶写代码,那就慢慢培养感情吧~自定义SPI看这个SPI机制其实看的蛮久的,现在也不能说完全懂。以下是自定义的SPI代码的类图:每个类的作用:1、shoutService接口,是服务抽象的接口;2、Cat、Dog、Mow三个具体的实现;3、BaseThirdService,只有一个getCo
2020-10-12 00:22:23
595
原创 Reactor模式分类
目前存在的线程模型有:传统阻塞I/O服务模型Reactor模式根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现:单Reactor单线程单Reactor多线程主从Reactor多线程先描述一下传统阻塞I/O模型以示区别。传统阻塞I/O模型原理图其中,蓝色框表示线程;黄色框表示对象;绿色框表示方法。模型特点1)一个客户端对应一个线程,每个线程完成数据的输入、业务处理和数据返回;2)当并发数很大时会创建大量线程,占用很大的系统资源;3)创建连接后,
2020-05-24 17:14:27
405
原创 NIO之简易群聊系统
基于NIO编写简易的群聊系统服务器端接收客户端的连接接收客户端发送的消息并转发给其他所有客户端public class ChatServer { private Selector selector; private ServerSocketChannel serverSocketChannel; private static final int port = 8888; public ChatServer() { try {
2020-05-23 14:36:32
235
原创 NIO之简易服务器与客户端
采用NIO的方式写一个简易的服务器与客户端。服务器public class NIOServer { public static void main(String[] args) throws IOException { ServerSocketChannel ssc = ServerSocketChannel.open(); Selector selector = Selector.open(); // 将ServerSocketChannel绑定
2020-05-22 20:20:19
286
原创 NIO之channel和buffer的运用
例1:将hello,world!输出到文件a.txt中public class NIOFilechannel { public static void main(String[] args) throws IOException { // 创建一个输出流 FileOutputStream fos = new FileOutputStream("C:\\Users\\whatsoooever\\Desktop\\a.txt"); // 获取输出流的c
2020-05-22 15:40:24
385
原创 JDBC使用
渣渣用惯了框架回头来学习JDBC了,毕竟还是要知其然知其所以然。本文目录JDBC介绍配置Mysql-connector的Jar包1)下载Jar包2)集成到IDEAJDBC运用1. 数据库连接,statement语句和preparedresultset结果集的使用batch批处理事务CLOB文本大对象使用封装JDBCJDBC介绍JDBC是以统一方式访问数据库的API,无论实际使用的是Mysql数据库还是Oracle数据库,加入的数据库Jar包后,用户只需操作统一的JDBC即可。配置Mysql-con
2020-05-15 20:32:09
229
原创 运行外部Java程序
如何运行外部Java文件,有三种方式。首先先写一个java文件到c盘中:public class Demo { public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, Illeg...
2020-04-03 22:39:14
406
原创 自定义注解
一般使用自定义注解有三大步骤:首先自定义注解;在代码中使用自定义的注解;通过注解获取信息。自定义注解的过程中一般会使用到@Target和@Retention,其中:@Retention的作用是描述注解的生命周期取值作用SOURCE在源文件中有效(即在源文件中保留)CLASS在class文件中有效(即在class文件中保留)RUNTIME在运...
2020-04-03 16:42:52
231
1
原创 XML解析
手写一个简单的基于SAX的XML解析器。假设在包servlet下有一个名为:web.xml的文件如下:<?xml version="1.0" encoding="UTF-8" standalone="yes"?><web-app> <servlet> <servlet-name>login</servlet-nam...
2020-03-29 21:20:09
201
原创 聊天室极简实现
从今天起学习新知识了,再也不是复习老知识了。。聊天室极简实现,要求:有群聊和私聊两种模式;当用户进入聊天室时,自己的视角显示“欢迎您进入聊天室”,聊天室其他成员显示“XXX进入聊天室”;私聊模式中规定信息格式:@XXX:msg。为了好实现。码代码前分析:客户端需要开辟两个线程分别接收消息和发送消息;服务器端需要不断监听端口是否被新的客户端连接,若有新客户端连接则开辟新线程负责该...
2020-03-27 22:21:40
323
原创 @Async注解
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题。@Async注解使用条件:@Async注解一般用在类的方法上,如果用在类上,那么这个类所有的方法都是异步执行的;所使用的@Async注解方法的类对象...
2019-07-25 18:24:06
3468
原创 【JAVA8新特性】之stream
写本章节的原因起源于以下代码:Optional<KeywordRouter> optional = getAllKeywordRouter().stream().filter(predicate -> predicate.getOriginKeyword().equals(originKeyword)).findFirst();小白再看代码的时候都晕了。。想着何时自己才能写...
2019-07-24 16:47:24
278
原创 Optional类的使用
【JAVA8新特性】Optional这是实习中学到新的类,看业务代码时发现大佬们喜欢用这个类,特别钻研了一下。Optional是一个可以为null的容器对象:它可以保存类型T的值,或者仅仅保存null。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的...
2019-07-24 15:10:23
347
原创 SpringBoot结合定时器@Scheduled
参考文章:https://www.cnblogs.com/ityouknow/p/6132645.html参考文章:https://www.cnblogs.com/dyppp/p/7498457.html在我们开发项目过程中,经常需要定时任务来帮助我们来做一些内容, Spring Boot 默认已经帮我们实行了,只需要添加相应的注解就可以实现。1.pom 包配置pom 包里面只需要引入 S...
2019-07-22 09:58:24
284
原创 约瑟夫环
约瑟夫问题约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。首先A开始报数,他报1。侥幸逃过一劫。然后轮到B报数,他报2。非常惨,他被杀了C接着从1开始报数接着轮到A报数,他报2。也被杀死了。最终胜利者是...
2019-07-21 10:56:23
267
原创 eslasticsearch多种常用搜索方式
一、Query String Search(‘Query String’方式的搜索)1.搜索全部商品GET /shop_index/productInfo/_search返回结果:{ "took": 8, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0...
2019-07-20 20:54:14
1784
转载 EXPLAIN分析SQL语句
原博地址:https://blog.youkuaiyun.com/zxc123e/article/details/77683920使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的sql语句,可以帮助选择更好的索引和写出更优化的查询语句。使用explain我看可以sql执行的相关信息:表的读取顺序数据读取操作的操作类型哪些索引可以使用哪些索引被实际使用表之...
2019-07-10 10:19:46
198
原创 git操作和分支管理
入职一周后,我终于有产出了。。虽然上传不到半小时就出了bug。。什么时候能改掉毛手毛脚的毛病记录一下完整推上线以及分支管理等等操作。先从master上拉个feature分支到本地:git checkout -b feature/20190708-keyrouter在本地哼哧哼哧敲代码完成后,先add到暂存区: git add (+文件名)commit到工作区:(随时可以查一下状态:...
2019-07-09 19:47:30
316
转载 SwaggerAPI注解详解及注解常用参数配置
原博文地址:https://blog.youkuaiyun.com/java_yes/article/details/79183804官网github地址:https://github.com/swagger-api/swagger-core/wiki/Annotations-1.5.X注解@Api:作用在类上,用来标注该类具体实现内容。表示标识这个类是swagger的资源 。参数:tags:可...
2019-07-05 09:48:28
698
原创 git抓取操作
我一定是太菜了,让师傅手把手教学。第一步:选择要存放文件的地方,然后bash。点击后出现以下弹框。顺便学习一下Linux指令:pwd:得知目前所在的工作目录的绝对路径名称;git(或者git help):获取git的全部指令。第二步:执行命令git clone 网址其中网址来源:然后就下载完成啦。可以导进idea中了,就是导进去要记得配置...
2019-07-03 11:21:32
870
3
原创 SwitchHosts权限解决
记录实习第一天的第一个坑:SwitchHosts下载网址:https://github.com/oldj/SwitchHosts/releases下完后从这里打开程序:右键以管理员方式运行,发现报错了:然后就去找图中所示的hosts文件,右键属性,找到“安全”选项卡,赋予User所有权限,把文件设为只读——应用。再打开就可以了。...
2019-07-02 14:24:33
6879
2
转载 MVCC机制
原文链接:https://blog.youkuaiyun.com/whoamiyang/article/details/519018881. MVCC简介1.1 什么是MVCCMVCC是一种多版本并发控制机制。1.2 MVCC是为了解决什么问题?大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用....
2019-06-12 20:10:31
237
转载 数据库之Group By
转自:https://blog.youkuaiyun.com/u014717572/article/details/80687042写在前面的话:用了好久group by,今天早上一觉醒来,突然感觉group by好陌生,总有个筋别不过来,为什么不能够select * from Table group by id,为什么一定不能是*,而是某一个列或者某个列的聚合函数,group by 多个字段可以怎么去很...
2019-06-05 10:11:36
1000
2
转载 哈夫曼编码
参考原博客:https://www.cnblogs.com/wuyuankun/p/3982216.html哈夫曼编码步骤:一、对给定的n个权值{W1,W2,W3,…,Wi,…,Wn}构成n棵二叉树的初始集合F= {T1,T2,T3,…,Ti,…,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空。(为方便在计算机上实现算 法,一般还要求以Ti的权值Wi的升序排列。)...
2019-05-27 12:45:51
485
原创 秒杀功能(9)安全优化三
接口限流防刷为了防止恶意用户在短时间(如1秒内)刷网页访问太多次(如几百次),我们做了这个接口限流防刷的优化。初步版本(Redis)思路是:限制用户在若干秒内访问秒杀网站若干次之内。(如限制用户在5秒内只能访问网站5次)代码逻辑:在用户点击“立即秒杀”按钮时,会先访问/miaosha/path路径获取随机秒杀地址,在这之前会进行是否访问次数过多的判断;在某用户首次访问时现在redis...
2019-05-14 13:42:25
436
原创 秒杀功能(8)安全优化二
数学公式验证码这部分主要讲解的是在获取秒杀地址前增加验证码的功能,作用有两点:防止机器恶意刷秒杀按钮分散用户请求,减少服务器并发处理负担代码流程为:前端在渲染页面时,若是可以秒杀的阶段,则要调用后端生成数字验证码;后端生成验证码的图片后,把答案存在了redis中(设置时间是300s),把图片返回到前端;用户需要在页面先填写验证码,才能点击“立即秒杀按钮”。在点击立即秒杀按钮后,...
2019-05-13 13:43:06
276
原创 秒杀功能(7)安全优化一
安全优化从本篇开始讲秒杀系统的安全优化。主要分为三大块:秒杀接口地址隐藏数学公式验证码接口限流防刷秒杀接口地址隐藏每次点击秒杀按钮,才会生成秒杀地址,之前是不知道秒杀地址的。不是写死的,是从服务端获取,动态拼接而成的地址。(Http协议是明文传输,透明的,前端无法控制恶意用户进行攻击)安全校验还是要放在服务端,禁止掉这些恶意服务。该操作:可以为了防止,恶意用户登陆之后,获取tok...
2019-05-13 10:44:33
498
原创 秒杀功能(6)RabbitMQ
这篇讲解的内容较多。先解决业务问题再解决性能问题。业务问题之前的代码中有两类业务问题:超卖;若一个用户用两个平台同时秒杀某一商品,可能会出现该用户秒杀两件商品的情况。这两个问题虽然业务问题很大,但代码改动特别小。超卖这里利用数据库本身的锁来解决,只需要改动dao层代码,修改GoodsDao的代码。//改动前的代码@Update("update miaosha_goods ...
2019-05-12 21:42:57
1855
2
原创 SpringBoot集成RabbitMQ
项目中用到rabbitMQ来削流量峰值,简单记录一下springboot如何集成rabbitMQ的。SpringBoot集成RabbitMQ第一步:先下载erlang和rabbitMQ-server;第二步:SpringBoot的pom中添加依赖;<dependency> <groupId>org.springframework.boot</grou...
2019-05-11 16:34:04
1208
原创 秒杀功能(5)页面静态化
这篇是讲页面优化技术的第二项:页面静态化、前后端分离。之前的代码的请求逻辑是:客户端请求;服务端的servlet或controller接收请求(后端控制路由与渲染页面,整个项目开发的权重大部分在后端);调用service,dao层代码完成业务逻辑;返回页面;页面展现一些动态的代码;前后端分离的新的方式是:浏览器发送请求;直接到达html页面(前端控制路由与渲染页面,整个项目...
2019-05-08 21:23:23
1033
5
原创 秒杀功能(4)缓存技术
从这一节开始就是讲如何优化秒杀的功能了。第一步考虑的是页面优化技术。页面优化技术有:页面缓存 + URL缓存 + 对象缓存页面静态化,前后端分离静态资源优化CDN优化这篇文章先讲第一项:页面缓存 + URL + 对象缓存 具体如何实现。页面缓存在controller层的GoodsController中以获取商品列表的list方法举例。将原本springboot自动渲染页面改成手...
2019-05-08 16:06:41
833
原创 Morris遍历
Morris遍历程序流程:假设指针cur指向当前节点,cur从头结点开始。如果cur无左孩子,则cur = cur.right;如果cur右左孩子,则找到cur左子树上最右的节点,记为mostRight,分为以下两种情况:若mostRight的right指针为null,则让其指向cur,且cur = cur.left;若mostRight的right指针指向cur,则让其指回nu...
2019-05-05 22:03:01
642
原创 单调栈
应用:求数组中每个数左边离它最近的比它大的和右边离她最近的比它大的数。暴力解:每个位置两边遍历,时间复杂度O(n^2)。单调栈:时间复杂度O(n)。...
2019-05-05 17:37:30
188
原创 窗口及窗口最小/大值的更新结构(单调双向队列)
窗口窗口的数据结构使用的是单调双向队列。滑动时,加数只能从窗口右端(尾部)加,滑出数时数只能从左边(头部)滑出。注意:队列中存的是数组的下标。以求最大值为例,流程为:窗口进数时有两种情况:新加的数比队列中最后一个数小,则直接在尾部加入队列;新加的数比队列中最后一个数大或等于,则从尾部弹出旧数直到队列尾部的数严格大于新加入的数,再把新数加入队列尾部。注意:队列中的值要严格递减,若碰到...
2019-05-04 16:20:21
254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人