- 博客(39)
- 资源 (15)
- 收藏
- 关注
原创 Resolv: 简单实用的Go语言2D碰撞检测函数库
在内部检查形状相交时,执行分离轴定理(SAT)碰撞测试(当与凸多边形相交测试时),这代表了 Resolv 更低效的窄相位部分。在这个例子中,首先创建空间 Space 对象,并创建各种物体(玩家,墙壁等),将这些物体加入到此空间中,在 Update 函数中每帧去检测玩家是否与空间中的其他物体有碰撞,并移动玩家,最后更新玩家的位置。注:“解析”按照作者的说法是解析碰撞,根据作者给出的案例来看,应该是能够解析出物体的碰撞点。注意:resolv 库仍然在开发中,但应该在实际场景中足够稳定。
2024-04-04 00:36:40 427
原创 Redis big key
1、什么是 big key?对于不同的数据类型,big key 定义不同:字符串类型:它的big体现在单个value值很大,一般认为超过10KB就是bigkey。非字符串类型:哈希、列表、集合、有序集合,它们的big体现在元素个数太多。建议把集合类型的元素个数控制在1万个以下。2、 big key 的危害:影响性能,容易产生阻塞。在 Redis 基本 IO 模型中,主要是主线程在执行操作,任何耗时的操作,例如 bigkey、全量返回等操作,都是潜在的性能瓶颈。AOF 重写过程中:主进程 fo
2021-05-29 19:17:49 922
原创 手写一个简单的 Redis 客户端
RESP 协议RESP 协议,全称 Redis 序列化协议(Redis Serialization Protocol) 是 Redis 客户端和服务器用来通信的文本协议,其特点是简单直观。优势在于实现简单,解析性能好。五种基本的Redis协议数据结构的最小单元类型:每个单元类型以【/r/n】结尾单行字符串以【+】开头,+OK\r\n表示字符串OK多行字符串以【$】开头,后面是字符串长度。数值以【:】开头,后面是整数字符串,:10086表示数值10086错误信息以【-】开头,
2021-05-29 19:07:44 725
原创 建议生产环境禁用 replace into
在生产中,经常会有同学喜欢使用一条SQL语句执行更新/插入操作(解决唯一键冲突)。比如下面的例子:利用唯一键:(code, name) 更新学生表的学号和姓名。 当唯一键存在时,就会更新,当不存在时就会插入数据。 <insertid="replaceBatch"parameterType="java.util.List">replaceintostudent(code,name,address,)VALUES<foreachcollec...
2021-05-15 22:20:06 665
原创 查找线上日志却不小心引起了事故
1、查找线上日志却不小心引起了事故。小赵为了排查线上的一个问题,登录到 DOCKER 容器上,用 VI 命令打开一个日志文件,过了一会儿,发现了告警:容器重启!一个查看日志的命令却导致了机器重启,这是为什么呢?2、不建议用 vi 命令查看大文件VI 工具的定位是编辑器,在加载文件的时候,需要将其全部加载到内存中。如果文件太大,为了将文件全部加载到内存中,就需要消耗的大量的内存空间,可能会影响部署在机器上的其他应用,严重导致机器卡顿。而容器有健康检查,如果检测到容器不能提供服务时,就会把自动将容器重启,
2021-05-09 23:09:25 681
原创 MyBatis 多条件查询的三种实现
预计阅读时间 5 分钟在开发中,经常遇到根据搜索条件查询的情况。可以利用 MyBatis 中的动态SQL的特性来实现多条件选择查询。1、多条件查询的实现方式根据 MAPPER接口 入参的不同形式,有三种方法来实现:1.1、条件入参为实体类 /** * 条件查询BO * @param condition&n.
2021-03-21 18:09:17 4535 1
原创 入参太多导致的烦恼
入参太多导致的烦恼代码的坏味道之一:过长参数列表入参设计的几点建议:方法的参数列表应该尽量避免重复,减少调用者的使用难度。何为重复?就是这个参数 A 可以通过另外一个参数 B 轻松获得,所以不应该辛苦调用者再去找出参数 A。这里可以去除参数 A,使获取参数 A 的「**责任转移」**到方法。并且参数列表越短就越容易理解。为什么参数会有很多?过长参数列可能是将多个算法并到一个函数中时发生的。函数中的入参可以用来控制最终选用哪个算法去执行。入参太多的缺点太长的参数列难以理解,增加理
2021-02-08 22:38:11 1035
原创 我有N种方法消除 if-else,而你却无可奈何(第三篇:责任链模式)
我有N种方法消除 if-else,而你却无可奈何(第三篇:责任链模式)实例:烹饪。周六中午一个人吃饭,我就煮了面和一个番茄蛋汤。让我们来看看煮面和做汤的流程:煮面的流程:烧水 --> 煮,等会沸腾之后,就把面放进沸腾的水中煮熟。做番茄蛋汤的流程:处理鸡蛋 --> 处理番茄 --> 烧水 --> 煮,先处理鸡蛋和番茄,同时可以把水烧开,最后将鸡蛋和番茄放入热水中煮用 if-else 来实现周六的午饭:if (烹饪面) { 烧水; 放入面; 煮; } e
2021-02-08 22:37:36 504 1
原创 关于 Cookie 的那些事儿
带着问题去学习:什么是 Cookie?Cookie的作用?Cookie 的工作机制?Cookie 的使用场景?后端处理 Cookie 实战1、什么是Cookie?服务端向客服端写入的信息片段,用于保存客户端的状态,为 key-value 键值对的格式。因为 HTTP 是无状态协议,即服务器无法判断客户端的身份(是否为同一浏览器),所以需要 Cookie 来保存客户端的信息。比如:使用门禁卡进入公司的大门,卡就相当于 Cookie。这里就存在一个问题,门禁卡被别人捡到了,别人就可以冒充你
2021-02-05 22:56:22 254
原创 我有N种方法消除 if-else,而你却无可奈何(第二篇:表驱动编程方法)
重构的唯一目的是:用较小的工作量,创造更大的价值。本文主要内容:通过一个简单的代码示例,利用表驱动的编程方法、策略模式和工厂模式等对 if-else 语句进行改进。先看一个具体的例子:设计一个程序,通过不同的渠道(移动,联通…)发送消息。用 if-else 实现在 MsgServiceIml 类实现了 MsgService 消息服务接口,重写发送消息的方法 send。目前使用「中国移动」和「联通」两种渠道发消息,下面的代码所示:public class MsgServiceImpl imple.
2021-01-23 21:59:29 360 1
原创 我有N种方法消除 if-else,而你却无可奈何(第一篇:增强可读性)
重构技术就是以微小的步伐修改程序。重构有风险,修改需谨慎。修改越多,出错越多,重构必须系统化进行。何时要消除代码中的 if-else:可读性差扩展性不强,违反单一职责原则,开闭原则。不符合SOLID原则中的”开闭原则“ ——对扩展开放,对更改封闭。每次都需要修改原有代码(对更改没有封闭),不断的添加”if else"。有以下十种方法来消除代码中的 if-else 语句:1、卫语句2、使用 SWTICH CASE 语句3、提炼方法4、表驱动(事件委托处理模型)5、策略模式(可结合.
2021-01-17 20:58:08 311
原创 「maven」从一次 maven 排除问题中找到解决问题的方法论。
开发中遇到了报错该如何处理?百度呀,google呀,都太泛化了,搜索出来的可能有很多个解决方法,但可能只有一种方法来解决你的问题。解决访问的方法:找到错误信息,分析错误原因,逐一排除,最后便是答案。一次解决错误的过程找到错误信息某一次 SpringBoot 项目启动过程中报错,没有任何日志,就程序结束了。如何捕捉到错误,查看错误信息?如下:try{SpringApplication.run(Application.class,args);}catch(Excep...
2021-01-01 11:55:02 291
原创 实用简单的MyBatis 的批量操作
阿里巴巴编程规范:【推荐】循环体中的语句要考量性能,以下操作尽量移至循环体外处理,如定义对象、变 量、获取数据库连接,进行不必要的 try-catch 操作(这个 try-catch 是否可以移至循环体外)。在有些场景中,我们需要批量对数据进行增删改操作利用MyBatis 的 FOREACH 标签,我们可以动态地创建多条SQL语句。foreach 元素的功能非常强大,它允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。它也允许你指定开头与结尾的字符串以及集合项
2020-11-29 23:47:39 212
原创 Java8 Stream 流
Stream 流看之前:需要一些Lambda语法知识,可以查看参考资料中的文章:万字详解,JDK1.8的Lambda、Stream和日期的使用详解。正文Java8 API Stream 允许你以声明性方式处理数据集合或数组(通过查询语句来表达。Stream 的特点:Stream 自己不会存储数据Stream 不会改变源对象,他们会返回一个持有结果的新对象Stream 操作是延迟执行的,意味着他们只会在需要结果的时候才会执行。Stream 只能消费一次,消费完毕之后就会关闭。Stream
2020-11-22 22:11:16 424
原创 【Redis实战】Redis 简单实战
Redis 实战1、Navigation Session需求:用户60秒内访问的N个网站页面,或许包含当前 TA 正在看或者感兴趣的东西。由此可以推荐对应的广告,使得用户更容易对投放的广告感兴趣。利用Redis可以简单实现:MULTIRPUSH pagewviews.user:<userid> http://.....EXPIRE pagewviews.user:<userid> 60EXEC2、Redis 缓存常用数据图片:String,hash 数据类型3、
2020-11-14 15:05:24 754
原创 MySQL存储Java对象
1、存储Java对象的方法下面有三种方式,可以存储Java对象。1、将Java对象中的每一个字段都存入表中。优点:每个字段都可以被检索缺点:针对每个需要存储的对象,都要创建数据表。一个类对应一张表2、将Java对象序列化之后,存入Blob字段或者Text。优点:可以存储超大的对象,并且没有大小限制缺点:Blob数据类型的缺点,检索上存在问题3、保存为JSON字符串,使用VARCHAR数据类型存储优点:可以存储完整的对象,反序列化也很方便。缺点:不方便检索内容,需要提前估计
2020-11-08 20:49:51 4158
原创 正则表达式@Link替换
1、简单实现替换场景:公众号可以发送模板消息,为了给用户发送自定义的消息,需要对消息内容中的特定符号进行替换。比如:恭喜 nickname抢到了{nickname} 抢到了nickname抢到了{productName} ,即恭喜XXX用户,抢到了XXX商品。那么如何对 ${nickname} 和 ${productName} 进行替换呢?Java 代码实现: String newContent = content //替换昵称 .replaceAl
2020-10-25 12:14:23 356
原创 【Redis实战】 统计UV
Redis 统计UV需求:以一天为单位,统计 index.html 页面打开的UV。需根据 UserId 对访问的用户去重。(假设所有用户已经登录)UV 和 PV 在本需求中的定义:UV 的定义:以UserId 为唯一标识,统计当天用户唯一访问量。比如:你在今天一共访问 index.html 10次,但是统计 UV 的时候,只算作 UV + 1PV定义:登录用户访问该页面的次数。代码如下:这里使用了Redis 中的哈希表hash数据结构,创建一个哈希表,以URL+日期(年-月-日) 作为 k
2020-08-29 16:31:00 336
原创 【快速使用Feign调用】
【快速使用Feign调用】文章目录【快速使用Feign调用】0、概述1、创建 hello-server2、创建 hello-client3、验证4、参考资料0、概述必备知识:【快速搭建Eureka注册中心】两个服务:feign-eureka-hello-server:服务提供者,以下简称 hello-serverfeign-eureka-hello-client:服务调用者,以下简称 hello-client达到的效果:hello-client 调用 hello-server 的函数接口
2020-08-16 20:34:18 302
原创 【快速搭建Eureka注册中心】
一、步骤1、创建 SpringBoot 项目引入starter:Spring WebEureka Server2、在项目的主启动类上添加注解 @EnableEurekaServer@EnableEurekaServer@SpringBootApplicationpublic class EurekaServerApplication { public static void main(String[] args) { SpringApplication.ru.
2020-08-16 12:35:43 364
原创 「简单入门」MyBatis Generator 的使用(一)
读完本文,你可以快速上手 mybatis-generator对于 MyBatis generator ,以下简称 MGB。0、创建项目,引入MBG 插件创建 SpringBoot 项目:导入JDBC依赖,Mybatis 框架,MySQL 驱动。注:需要在Mybatis-generator 文件中指定MySQL驱动,否则会报错:引入 MGB 插件:在 pom.xml 文件中添加插件<!--这段plugin就可以了--><plugin> <groupI.
2020-07-25 14:25:39 410
原创 线程池面试考点详解
为什么要使用线程池?线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。线程池主要特点为:线程复用;控制最大并发数;管理线程。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的...
2019-10-28 22:37:43 504
原创 面试题:粘包和拆包
什么是消息保护边界?UDP协议发送数据,每一个包都是被分开的,每一个包都有它自己的边界,不会在接收方与其他的包混杂成为一个包所以粘包和拆包是针对于TCP包什么是粘包和拆包?客户端给服务端发送2个TCP数据包有以下几种情况:(1) 正常,两个包分开发送(2) 两个包一同发送(3) 接收到不完整的或多出一部分的数据包。有3个原因:应用程序一次发送的数据大于...
2019-09-27 10:35:08 866 2
原创 手写单例设计模式
参考:《Head Fisrt 设计模式》1、如果 getInstance() 的性能对应用程式不是很关键给 getInstance() 加 synchronized 关键字。public class Singleton{ private static Singleton uniqueInstance; private Singleton(){ //每个线程在进入这...
2019-09-13 10:01:09 340
原创 Maven setting文件配置错误:Non-parseable settings..in comment after two dashes (--) next character must be>
安装配置Maven安装完Maven后,配置本地系统环境变量,配置好setting.xml文件:设置本地仓库,设置国内镜像,设置JDK版本等;详细安装配置,请参考:Maven配置运行mvn命令运行mvn -version 成功返回maven相关信息运行mvn help:system,自动帮我们到Maven中央仓库下载缺省的或者Maven中央仓库更新的各种配置文件和类库(jar包)到Mave...
2019-08-16 08:49:11 13183 3
原创 有趣的正则表达式:中英文互换位置
参考文章:正则表达式替换 高级用法 [转]Notepad++的正则表达式替换和替换背景:一位学英语的朋友A,在上计算机辅助翻译的课程的时候,老师给出了一个题目:要求使用正则表达式,将文档里面的英文与对应的中文解释调换位置,于是A便求助与我…先看一个简单的例子:apple 苹果fruit 水果earth 地球交换英文和中文的位置,要达到如下的效果:apple 苹果fruit ...
2019-03-31 09:55:21 2959
原创 Linux使用源代码安装软件
使用源代码安装软件相关命令configure cmakemakemake install步骤:1,下载源代码,解压2,创建build目录,存放cmake,make编译的文件3,sudo make install4,make clean 删除临时文件config一个shell脚本,位于源文件的根目录中。作用:检查系统中是否有编译这个程序依赖的其它库之类的东西参数:pre...
2019-03-25 22:37:59 973
原创 windows命令行下构建java项目
什么是package? 请自行百度。如何构建一个Java项目?java项目结构:下面来创建一个项目名为java的项目:该项目的文件结构如下:第一步创建项目文件目录//创建项目文件夹 mkdir java //进入项目目录cd java //创建源代码目录 mkdir src //创建class文件目录 mkdir c...
2019-03-17 16:51:27 785
原创 ROS:编写节点,让ROS小乌龟画圆和矩形
操作系统:ubuntu1404,ROS indigo软件:Roboware实验开始在my_turtle_package(自己创建的package)->src 中创建cpp文件:(如下图)让小乌龟画圆的代码:#include "ros/ros.h"#include<geometry_msgs/Twist.h> //运动速度结构体类型 geometry_...
2018-12-11 10:38:28 18930 4
原创 Java:基本排序算法
本章代码地址:https://github.com/hustuhao/SortAlgorithm目录1,逆序排序2,选择排序3,冒泡排序4,折半查找5,快速排序(quickSort)6,归并排序7,希尔排序(Shell Sort)8,桶排序(Bucket Sort)9,基数排序10,插入排序11,堆排序1,逆序排序将有序数组逆序排序。...
2018-10-01 22:58:30 698
原创 VIM:去掉~文件
默认情况下,使用VIM编辑文件FILE之后,会多出几个文件,其中~结尾的是文件旧版本的备份文件,un~结尾的文件是用于在修改文件后重新编辑时也能实现之前步骤的undo功能。 如何禁止生成这几个文件呢? 找到VIM的配置文件,比如VIM8.1的配置文件_vimrc(一般在VIM安装目录下),在其中添加set noundofileset...
2018-10-01 16:32:50 1393
原创 VIM:我的GVIM设置(通用设置和编程语言设置)
主要内容:1,设置按F5编译java,c语言,c++等语言源代码2,设置用4个空格代替tab进行缩进3,取消备份文件前言: 为了在linux环境下熟悉VIM,我在windows环境下安装了GVIM8 修改vimrc文件可以更改VIM默认的设置,不需要每一次打开VIM就需要重新调整设置。 以下时vimrc的全部内容:...
2018-09-29 20:52:22 2333
原创 Ubuntu:修改hosts的方法
Part one 修改hosts Ubuntu上修改hosts没有windows那么方便。在windows中可以建立新的hosts文件,然后用鼠标拖拽到“C:\Windows\System32\drivers\etc”覆盖原来的hosts文件,或者直接去编辑原来的hosts文件。 但是在Ubuntu中,hosts原文件是“只读”的,需要用命令进行修改编辑。 ...
2018-09-29 09:45:53 5375
原创 Ubuntu:sudo 无法解析主机
因为要通过IPV6访问国外的网站,所以修改了本机的hosts文件,之后导致输入命令会出现 “sudo 无法解析主机”的错误。原因是没有将hosts文件里面的localname全部替换成本机的名字。 查看本机名command:hostname 重启网络command:sudo /etc/init.d/networking restart ...
2018-09-29 09:27:33 813
华中科技大学控制系统综合设计与实验.pdf
2019-07-31
Snort-2.9.13-插件开发步骤.docx
2019-07-08
入侵检测数据集 CIC-IDS-2017 完整版本
2019-05-16
IEC61375-2-RTP-PD
2019-03-20
启智ROS机器人开发手册(PDF原版)
2018-12-13
启智ROS机器人开发手册_V1.0.5(彩色图片版本)
2018-12-01
华中科技大学线性系统理论(研究生)课件
2018-11-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人