福音:IDEA、VSCODE神级插件Bito
Bito是什么?Bito是一款在编程软件中使用的插件,由ChatGPT团队开发,它是ChatGPT团队为了提高开发效率而开发的一款工具。
Bito的AI帮助开发人员极大地提高了其影响力。它像一把瑞士军刀,使用与ChatGPT相同的模型,可以将开发人员的工作效率提高10倍,每天为您节省一个小时!
Bito使编写代码,理解语法,编写测试用例,解释代码,评论代码,检查安全性甚至解释高级概念变得容易。经过数十亿行代码和数百万个文档的培训,可以完成令人难以置信的工作,而无需搜索网络或浪费时间在繁琐的事情上。
官方文档:https://docs.bito.ai/
IDEA环境
注意:Bito对于idea版本是有要求的,它要求最低版本是2021.1+ 。如果你的idea版本太低,那就升级版本吧
安装
打开IDEA的Settings界面,选择Plugin选项,输入Bito,直接点击Install安装即可,安装完成后,重启IDEA,插件生效
下图为已安装界面
注册
在IDEA的右侧,可以看到Bito标签栏,点击展开
点击Sign Up Or Sign-in去注册或登录,输入邮箱(Q ...
IP 归属用 Ip2region 就够了
抖音、微博、小红书等各平台相继上线”网络用户IP地址显示功能“,境外显示国家,境内显示到省市,且该功能无法关闭,IP地址为强制显示。无疑更加有效的约束键盘侠的言行举止,还原一个干净的网络环境!
作为技术人来说其实这个功能so easy,下面借助Ip2region来实现
Ip2region 简介是什么ip2region v2.0 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,提供了众多主流编程语言的xdb数据生成和查询客户端实现。
特性
标准化的数据格式
每个ip数据段的region信息都固定了格式:国家|区域|省份|城市|ISP,只有中国的数据绝大部分精确到了城市,其他国家部分数据只能定位到国家,后前的选项全部是0。
数据去重和压缩
xdb格式生成程序会自动去重和压缩部分数据,默认的全部IP数据,生成的 ip2region.xdb数据库是11MiB,随着数据的详细度增加数据库的大小也慢慢增大。
极速查询响应
即使是完全基于xdb文件的查询,单次查询响应时间在十微秒级别,可通过如下两种方式开启内存加速查询:
vIndex 索引缓存:使用固定的512 ...
Java + lua 双向组合拳
在某些业务场景下,我们可能会遇到lua中要调用java 代码情况,当然这个用JNI肯定是可以做到的,但是有更加方便的办法:LuaJavaBridge(LuaJava)和LuaJ。
luaj 主要特征
可以从Lua调用Java Class Static Method
调用Java方法时,支持int/float/boolean/String/Lua function 五种参数类型
可以将Lua function作为参数传递给Java,并让Java保存Lua function的引用
可以从Java调用Lua的全局函数,或者调用引用指向的Lua function
luaj的功能很简单,但对于集成各种SDK来说已经完全满足需求了。
luaj 用法示例Java方法原型:
public static float getNum(float n) { return n;}
lua调用示例:
-- Java 类的名称local className = "com/xttblog/Test"-- 调用 的Java 方法名local method = ...
PowerJob 第三代任务调度框架
简介概述PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,能让您轻松完成作业的调度与繁杂任务的分布式计算。
为什么选择 PowerJob ?当前市面上流行的作业调度框架有老牌的Quartz、基于Quartz的elastic-job和原先基于Quartz后面移除依赖的xxl-job,这里分别谈一些这些框架现存的缺点。
Quartz可以视为第一代任务调度框架,基本上是现有所有分布式调度框架的“祖宗”。由于历史原因,它不提供Web界面,只能通过API完成任务的配置,使用起来不够方便和灵活,同时它仅支持单机执行,无法有效利用整个集群的计算能力。
xxl-job可以视为第二代任务调度框架,在一定程度上解决了Quartz的不足,在过去几年中是个非常优秀的调度框架,不过放到今天来看,还是存在着一些不足的,具体如下:
数据库支持单一: 仅支持MySQL,使用其他DB需要自己魔改代码
有限的分布式计算能力:仅支持静态分片,无法很好的完成复杂任务的计算
不支持工作流:无法配置各个任务之间的依赖关系,不适用于有DAG需 ...
用Java开发个ChatGPT AI女朋友
体验到了ChatGPT的强大之后,那么我们会想,如果我们想基于ChatGPT开发一个自己的聊天机器人,这个能搞定吗?
ChatGPT平台已经为技术提供了一个入口了,很简单的就是实现了。
准备工作
已成功注册OpenAI的账号。
创建API KEY,这个API KEY是用于HTTP 请求身份验证的,可以创建多个。注意这个创建之后需要马上复制好保存,关闭弹框之后就看不到了。
访问地址:
https://platform.openai.com/account/api-keys
登录账号,然后创建API KEY:
官方API文档链接:
https://platform.openai.com/docs/api-reference/authentication
注意:
API调用是收费的,但是OpenAI 已经为我们免费提供了18美元的用量,足够大家放心使用。
接口示例该接口功能较多,支持最常用的问答功能。
请求方式Post
url:https://api.openai.com/v1/completions
json请求体
{ "model ...
Sa-Token-Quick-Login 快速登录认证法
解决什么问题Sa-Token-Quick-Login可以为一个系统快速的、零代码 注入一个登录页面
试想一下,假如我们开发了一个非常简单的小系统,比如说:服务器性能监控页面, 我们将它部署在服务器上,通过访问这个页面,我们可以随时了解服务器性能信息,非常方便
然而,这个页面方便我们的同时,也方便了一些不法的攻击者,由于这个页面毫无防护的暴露在公网中,任何一台安装了浏览器的电脑都可以随时访问它!
为此,我们必须给这个系统加上一个登录认证,只有知晓了后台密码的人员才可以进行访问
细细想来,完成这个功能你需要:
编写前端登录页面,手写各种表单样式
寻找合适的ajax类库,jQuery?Axios?还是直接前后台不分离?
寻找合适的模板引擎,比如jsp、Thymeleaf、FreeMarker、Velocity……选哪个呢?
处理后台各种拦截认证逻辑,前后台接口对接
你可能还会遇到令人头痛欲裂的模板引擎中ContextPath处理
……
你马上就会发现,写个监控页你一下午就可以搞定,然而这个登录页你却可能需要花上两三天的时间,这是一笔及其不划算的时间浪费
那么现在你可能就会有个疑问,难 ...
如何将自己开发的网站放到网上?看这一篇就够了
有很多做网页的前端后端小白都想把自己辛辛苦苦做出来的网站放到网上,让别人观摩观摩。可无奈技术有限,对于网站部署流程有些迷茫。在这里,我会告诉大家,如何将自己做出来的网站放到网上。
首先,我们需要明白几个概念:备案,解析。
然后,我们还要知道,应该准备什么东西:网站源代码(这个就不细说了),服务器,域名。
备案所谓的网站备案其实是网站的ICP备案的简称,国家相关规定如下:《互联网信息服务管理办法》指出互联网信息服务分为经营性和非经营性两类。国家对经营性互联网信息服务实行许可制度;对非经营性互联网信息服务实行备案制度。未取得许可或者未履行备案手续的,不得从事互联网信息服务。
一般来说,备案指的是域名进行备案,而不是服务器进行备案。一个网站是否备案,是取决于网站所用空间是国内还是国外的.
如果是国内主机,网站域名需要备案`,才能通过域名访问到你的网站。
如果是国外主机,网站域名是不用备案的,也可以通过域名访问。
解析域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识 ...
获取resources目录下文件路径的九套功法
前述项目开发中,经常会有一些静态资源,被放置在resources目录下,随项目打包在一起,代码中要使用的时候,通过文件读取的方式,加载并使用;
本文中汇总整理了九种方式获取resources目录下文件的方法。
其中公用的打印文件方法如下:
/** * 根据文件路径读取文件内容 * * @param fileInPath * @throws IOException */public static void getFileContent(Object fileInPath) throws IOException { BufferedReader br = null; if (fileInPath == null) { return; } if (fileInPath instanceof String) { br = new BufferedReader(new FileReader(new File((String) fileInPath))); } else if (fileIn ...
王炸!内部消息队列 Disruptor
背景工作中遇到项目使用Disruptor做消息队列,对你没看错,不是Kafka,也不是rabbitmq;Disruptor有个最大的优点就是快,还有一点它是开源的哦,下面做个简单的记录。
介绍
Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于 Disruptor 开发的系统单线程能支撑每秒 600 万订单,2010 年在 QCon 演讲后,获得了业界关注。
Disruptor是一个开源的Java框架,它被设计用于在生产者—消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS)和尽量低的延迟。
从功能上来看,Disruptor 是实现了”队列”的功能,而且是一个有界队列。那么它的应用场景自然就是”生产者-消费者”模型的应用场合了。
Disruptor是LMAX在线交易平台的关键组成部分,LMAX平台使用该框架对订单处理速度能达到600万TPS,除金融领域之外,其他一般的应用中都可以用到Disruptor,它可以带来显著的性能提升 ...
网站被攻击?Nginx 实现自动封禁IP
IP 封禁
在nginx的conf目录下创建一个blockip.conf文件
里面放需要封禁的IP,格式如下
deny 1.2.3.4;
在nginx的HTTP的配置中添加如下内容
include blockips.conf;
重启nginx
/usr/local/nginx/sbin/nginx -s reload
然后你就会看到IP被封禁了,你会喜提403;
实现自动封禁IP
如何实现使用nginx自动封禁ip的功能?
AWK统计access.log,记录每分钟访问超过60次的ip,然后配合nginx进行封禁
编写shell脚本
crontab定时跑脚本
先来实现第一个吧
操作一: AWK统计access.log,记录每分钟访问超过60次的ip
awk '{print $1}' access.log | sort | uniq -cd | awk '{if($1>60)print $0}'
awk '{print $1} ...