首页
关于作者
阅读记录
友链
Search
1
微内核插件架构风格在skywalking agent 上的实践
363 阅读
2
debian 11 安装nginx 并配置端口映射
341 阅读
3
和chatgpt聊设计
307 阅读
4
开始看《金阁寺》
246 阅读
5
github上star的工程分类记录
202 阅读
不知所云
杂记
书籍摘抄
有点技术
Redis
运维
架构
nginx
byzer
尚未分类
程序人生
与AI聊天
登录
/
注册
Search
标签搜索
nginx
redis
byzer
github
运维
mybatis-plus
王猪
累计撰写
25
篇文章
累计收到
3
条评论
首页
栏目
不知所云
杂记
书籍摘抄
有点技术
Redis
运维
架构
nginx
byzer
尚未分类
程序人生
与AI聊天
页面
关于作者
阅读记录
友链
搜索到
24
篇与
的结果
2023-06-04
和chatgpt聊设计
和chatgpt聊设计chatgpt最近红的出圈,那我们就以自己负责的专业问题对他进行提问,聊一聊关于低代码SQL生成的设计。问问题的思路梳理了一下和chatgpt聊的思路:开门见山,限定范围,明确业务场景你好,我想要为低代码或者无代码的OLAP平台设计一个SQL NODE 类,它应该如何设计找准问题点,要求其修改,完善“query"还需要人传入SQL,并不符合低代码的需求。掌握整体,约定接口,数据结构我想知道的是具体如何完成低代码、无代码的设计。前端可视化界面应该传入哪些参数,又如何构建SqlNode。不断追问细节根据你的设计,查询对象的数据结构应该如何?给出专业的提示,往结果中增加内容,让chatgpt填充它画的大饼你用到的属性太少了,既然是OLAP,肯定还有许多聚合函数那如果聚合后还需要having支持呢?那如果是复杂的查询,有子查询呢?那除了子查询,我们还有连表查询?反复纠错,细化设计getJoinCondition 中是不是过于简单,如何表示 tableA.cloumn_a = tableB.column_b不断循环,给他提示,给他纠错你对SQL模型的把控不够精确,有些可以是复数的输入引申扩展,结合开源你是否知道apache calcite那我们的设计和calcite可否集成优化那SQLNode如何转成RelNode或RexNode,两者有何区别设计一下具体的转换过程输出结果那将这次设计有所的类,用UML类图描述一下给我你的图化的太难看了,用plantText的展示的语言描述你把我们设计里的属性、方法等也填充进来对应的java代码和注释也生成一份吧。结果展示类图:java代码:import java.util.List; class SQLNode { // SQL节点的基类 } class QueryObject { private List<SQLNode> nodes; public void addNode(SQLNode node) { // 将SQL节点添加到列表中 } public void buildQuery() { // 构建查询逻辑 } } class FilterCondition { private SQLNode child; private String condition; public SQLNode getChild() { // 获取子节点 } public void setChild(SQLNode child) { // 设置子节点 } public String getCondition() { // 获取筛选条件 } public void setCondition(String condition) { // 设置筛选条件 } } class AggregationCondition { private SQLNode input; private String aggregationFunction; public SQLNode getInput() { // 获取输入节点 } public void setInput(SQLNode input) { // 设置输入节点 } public String getAggregationFunction() { // 获取聚合函数 } public void setAggregationFunction(String aggregationFunction) { // 设置聚合函数 } } class SortCondition { private SQLNode child; private String sortField; public SQLNode getChild() { // 获取子节点 } public void setChild(SQLNode child) { // 设置子节点 } public String getSortField() { // 获取排序字段 } public void setSortField(String sortField) { // 设置排序字段 } } 总结总的来说,它的设计能力、反应能力的确是超过没有什么工作经验的工程师的,但是它仍然需要一个正确的方向引导,才能找到你要的方向。这样的聊设计的过程,大概持续了30多分钟 ,我省略了一些细节追问上的提问。具体的问答,可以见此聊天记录链接:https://chat.openai.com/share/0014f7c7-b911-46eb-821a-f9327642a163它设计的不一定对,但是大方向却并没有什么错误,在后续的编码设计过程中,有细节还可以继续追问。
2023年06月04日
307 阅读
0 评论
0 点赞
2023-06-03
属实懒人操作,用Stream Web,可以一个PO类就省略mvc+dao开发
Stream Web:简化后端开发的利器https://gitee.com/wanglhup/stream-web什么是 Stream WebStream Web 受到 Stream Query 项目的启发,它通过定义一个数据库持久层对象(PO),自动生成相应的基础 RESTful 接口,使得简单的增删改查操作变得更加便捷。已经支持以下接口实现: @GetMapping("/{entity}/{id}") public Object getById(@PathVariable("entity") String entity, @PathVariable("id") String id); @DeleteMapping("/{entity}/{id}") public void deleteById(@PathVariable("entity") String entity, @PathVariable("id") String id); @PostMapping("/{entity}") public int create(@PathVariable("entity") String entity, @RequestBody Object entityObject); @PutMapping("/{entity}") public int updateById(@PathVariable("entity") String entity, @RequestBody Object entityObject); @GetMapping("/{entity}/all") public List<Object> getAll(@PathVariable("entity") String entity); 其实现可见:org.dark.web.AutoGenApi用起来真的方便吗?Stream Web 基于 Stream Query 进行开发,只需要依赖 stream-web-core 并配置需要扫描的 PO 包名,即可轻松实现功能。您可以通过以下 Maven 依赖配置将 stream-web-core 引入到您的项目中:<dependency> <groupId>org.dark</groupId> <artifactId>stream-web-core</artifactId> <version>1.0-SNAPSHOT</version> </dependency>同时,您还需要在您的应用程序配置中添加以下配置项,以指定需要扫描的 PO 包名:stream-web: base-packages: org.dark.streamweb.demo.po请将上述配置项添加到您的应用程序的配置文件中(比如 application.yaml 或 application.properties)。将 org.dark.streamweb.demo.po 替换为您实际的 PO 包名,以确保 Stream Web 正确扫描并生成相应的 RESTful 接口。请将上述配置项添加到您的应用程序的配置文件中(比如 application.yaml 或 application.properties)。将 org.dark.streamweb.demo.po 替换为您实际的 PO 包名,以确保 Stream Web 正确扫描并生成相应的 RESTful 接口。DEMO定义了一个PO@Data @TableName("users") public class UserPO { @TableId(value = "pk_id", type = IdType.AUTO) private String id; @TableField("name") private String name; @TableField("email") private String email; } 这是它对应的建表语句:CREATE TABLE users ( pk_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (pk_id) ); -- 初始化三条数据 INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com'); INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com'); INSERT INTO users (name, email) VALUES ('Charlie', 'charlie@example.com'); commit; 启动项目并访问浏览器访问,或者发送一个curl请求:curl http://localhost:8080/auto-gen/users/2就能得到一个json相应:{"id":"2","name":"Bob","email":"bob@example.com"}那它有什么问题吗?然而,目前的 Stream Web 只是一个玩具工程,它将所有接口都暴露给前端,没有进行鉴权的情况下,可能会导致被人拖库和删库等安全问题。因此,在将 Stream Web 用于实际项目中时,我们需要注意加强安全措施,包括但不限于鉴权机制和访问权限的限制,以确保数据的安全性。尽管 Stream Web 目前还存在一些问题,但它作为一个简化后端开发的工具,依然具有巨大的潜力。随着项目的不断演进和改进,相信 Stream Web 能够成为开发人员的得力助手,提升开发效率,减少重复工作,从而更好地服务于开发者和用户的需求。
2023年06月03日
126 阅读
0 评论
0 点赞
2023-05-28
HTTPS到底是什么?
引言现在基本上越来越多的网站都已经是HTTPS协议了,如果仅仅是HTTP协议的,怕是浏览器要给一个“不安全”的标志了,更有甚者,直接拦截了,得手动点放行才可以!那么HTTPS到底是怎么带来安全的呢?请求流程先来看看传统的HTTP协议下,是如何去请求的:十分简单的直来直去,请求在网络中是一个裸奔的状态,他人拦下之后,就可以篡改再发送,伪装成客户端骗服务器,亦或是伪装服务端欺骗客户端。而HTTPS是基于SSL/TLS协议的安全HTTP协议,它使用SSL/TLS协议对HTTP协议进行加密和认证,从而保证数据传输的安全性。因此,可以说HTTPS和SSL/TLS密不可分,SSL/TLS是HTTPS实现安全传输的基础。如下是它的请求流程:浏览器向服务器发送HTTPS请求。服务器返回证书。浏览器验证证书的合法性,并提取出服务器的公钥。浏览器生成一个随机的对称密钥,称为会话密钥。浏览器使用服务器的公钥对会话密钥进行加密,并将加密后的会话密钥发送给服务器。服务器使用自己的私钥对加密后的会话密钥进行解密,得到原始的会话密钥。从此以后,浏览器和服务器就可以使用会话密钥进行加密和解密,保证数据传输的安全性。证书是什么,正规吗?其中客户端(浏览器)会将证书向颁发证书的授权机构进行认证。SSL/TLS中的公钥格式通常是X.509证书格式。X.509证书是一种标准的数字证书格式,用于证明公钥的合法性和身份认证。X.509证书包含了公钥、证书颁发机构、证书有效期、证书主体等信息,可以被浏览器和服务器用于加密和认证。X.509证书通常使用DER编码或PEM编码进行存储和传输。DER编码是二进制格式,PEM编码是基于Base64编码的文本格式。在SSL/TLS握手过程中,服务器会将自己的X.509证书发送给客户端,客户端使用证书中的公钥进行加密和认证。验证证书的有效期:浏览器会检查证书的有效期,确保证书没有过期。验证证书的颁发机构:浏览器会检查证书的颁发机构,确保证书是由可信的机构颁发的。验证证书的主体:浏览器会检查证书的主体,确保证书是针对正确的域名颁发的。验证证书的公钥:浏览器会检查证书的公钥,确保证书的公钥可以用于加密会话密钥。如果证书无效或不可信,浏览器会弹出警告提示用户,防止用户继续访问不安全的网站。公钥它可靠吗?协议中产生的密钥对通常是非对称加密。常见的非对称加密算法包括RSA、DSA、ECC等。其中,RSA是最常用的非对称加密算法之一,它基于大质数分解的数学难题,具有较高的安全性和可靠性。DSA是数字签名算法,用于数字签名和验证,常用于身份认证和数据完整性保护。ECC是椭圆曲线加密算法,具有较高的安全性和效率,被广泛应用于移动设备和物联网等领域。密钥算法是由服务器决定的,一般为RSA,虽然ECC算法更为安全、效率也高,但是适配的客户端却还不是很广泛。让用户放心,我也用HTTPS整体流程以常用的nginx为例,最简单的配置为HTTPS的流程为:生成SSL证书和私钥:可以使用openssl命令生成自签名的SSL证书和私钥。配置Nginx:在Nginx的配置文件中,添加SSL证书和私钥的路径,以及其他相关的SSL参数。重启Nginx:重启Nginx使配置生效。测试HTTPS:使用浏览器访问网站,确保HTTPS正常工作。那如果是springboot呢,以默认内置tomcat为例:生成SSL证书和私钥:可以使用keytool命令生成自签名的SSL证书和私钥。配置application.properties文件:在application.properties文件中,添加SSL证书和私钥的路径,以及其他相关的SSL参数。配置Tomcat:在Spring Boot中,默认使用Tomcat作为Web服务器,需要在Tomcat的配置文件中添加SSL证书和私钥的路径,以及其他相关的SSL参数。测试HTTPS:使用浏览器访问网站,确保HTTPS正常工作。如何获取可信的SSL证书个人使用命令产生的SSL证书,用户的客户端便没有颁发可以进行验证。那么就需要去可信的证书颁发机构进行申请:Symantec、Comodo、GlobalSign、DigiCert、GoDaddy等均为受到严格认证和审核的证书颁发机构,可以免费申请,抑或是购买其服务。我当前的服务器,是腾讯免费赠送的1年,并且自动安装的。但是过期后怎么办,如何续期呢?那就要介绍一下acme.sh了。acme.shacme.sh是一个开源的证书申请工具,可以方便地申请Let's Encrypt证书,并自动化地续期证书。整体步骤如下:安装acme.sh:可以使用curl命令安装acme.sh。申请证书:使用acme.sh申请证书,需要提供域名和邮箱等信息,并选择验证方式。验证域名:acme.sh会向域名的DNS服务器或Web服务器发送验证请求,确保域名的所有权和控制权。安装证书:acme.sh会自动安装证书和私钥,并配置Web服务器以使用HTTPS。为了确保网站的安全性,可以使用crontab等工具设置定期续期证书的任务进行自动化地续期证书。acme.sh还支持多种Web服务器和DNS服务器,可以方便地适配不同的环境。
2023年05月28日
113 阅读
0 评论
1 点赞
2023-05-27
开始看《瓦尔登湖》
精神家园的坚守
2023年05月27日
65 阅读
0 评论
0 点赞
1
...
4
5
浙公网安备 33020502001051号
浙ICP备2023015387号-1