自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

半亩方糖

问渠哪得清如许?

  • 博客(383)
  • 收藏
  • 关注

原创 浅谈 golang 代码规范, 性能优化和需要注意的坑

浅谈 golang 代码规范, 性能优化和需要注意的坑

2022-09-23 11:30:16 547

原创 Reactor And Gev 详解 通俗易懂

gev是一个轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库 / websocket server,支持自定义协议,轻松快速搭建高性能服务器。

2022-09-17 14:25:18 433

原创 stogo 连多表查询语句直接生成 golang DTO 层结构体代码

stogo多连表查询语句直接生成 go DTO 层结构体代码许多 orm 框架都有能直接单表映射代码的功能, 但是多表却做不到因为多表组合的可能是无限种每次写数据映射表都很难受, 于是答主就写了一个工具支持连表查询语句直接生成 golang DTO 层结构体代码快速开始getgo get -u github.com/dengjiawen8955/[email protected]使用示例package testsimport ( "testing" "github.com/dengj

2021-10-26 13:00:24 491 3

原创 几十行代码简单实现 静态资源服务器(C/Golang/Java 代码)

简介几十行代码 用 socket 实现一个简单的 nginx 静态资源代理功能,目前语言有 C/Java/Golang提示:静态资源代理基于 HTTP,如果你不是很了解,请参考几十行代码使用TCP简单实现HTTP(C/Golang/Java 代码)1.Java 实现public static void main(String[] args) throws IOException { String basePath = "D:\\Enviroment\\java\\java_static_s

2021-06-09 11:37:26 364 1

原创 Flex布局详解

Flex 布局详解一、入门1. flex 是什么?flex 是 Flexible Box 的缩写,就是弹性盒子布局的意思2. 为什么我们需要 flex?解决元素居中问题自动弹性伸缩,合适适配不同大小的屏幕,和移动端3.flex 常见术语 三个2序号简记术语1二成员容器和项目(container / item)2二根轴主轴与交叉轴(main-axis / cross-axis)3二根线起始线(main/cross-start)与结束

2021-03-31 21:46:10 117224 17

原创 平衡二叉树详解 通俗易懂

平衡二叉树(AVL)阅读之前请先了解 二叉搜索树平衡二叉树定义:任意节点的子树的高度差都小于等于 11. 为什么使用「平衡二叉树」二叉树能提高查询的效率 O(logn),但是当你插入 {1,2,3,4,5,6} 这种数据的时候,你的二叉树就像一个「链表」一样,搜索效率变为 O(n)于是在 1962 年,一个姓 AV 的大佬(G. M. Adelson-Velsky) 和一个姓 L 的大佬( Evgenii Landis)提出「平衡二叉树」(AVL) 。于是插入 {1,2,3,4,5,6}

2021-01-10 14:49:03 119799 57

原创 数据结构 图论07 Floyd算法详解 通俗易懂

Floyd 算法详解Floyd 算法是 所有点到所有点 的最短路径的算法,阅读前请想了解图的数据结构「邻接矩阵」邻接矩阵Floyd 算法是一个基于「贪心」、「动态规划」求一个图中 所有点到所有点 最短路径的算法,时间复杂度 O(n3)1. 要点以每个点为「中转站」,刷新所有「入度」和「出度」的距离。Dijkstra 算法:每次从「未求出最短路径」的点中 取出 最短路径的点,并通过这个点为「中转站」刷新剩下「未求出最短路径」的距离。Dijkstra 的算法在图中的效果像是:以起点

2020-12-25 17:22:49 5381 2

原创 数据结构 图论06 Dijkstra算法详解 通俗易懂

Dijkstra 算法详解Dijkstra 算法是求一个图中一个点到其他所有点的最短路径的算法,阅读前请想了解图的数据结构「邻接矩阵」邻接矩阵Dijkstra 算法是一个基于「贪心」、「广度优先搜索」、「动态规划」求一个图中一个点到其他所有点的最短路径的算法,时间复杂度 O(n2)1. 要点每次从 「未求出最短路径的点」中 取出 距离距离起点 最小路径的点,以这个点为桥梁 刷新「未求出最短路径的点」的距离(看不懂没关系,请结合案例理解)2.图解案例分析案例:以 A 点为顶点,

2020-12-21 18:11:24 1026

原创 MySQL千万数据查询优化之路

可以看到, 数据量越大, 查询时间越长. 数据 1000-10000 的查询时间基本线性增长 (这里我的 MySQL 就在本机上, 如果是远程 MySQL 网络 IO 产生的时间将更长)在 MySQL 中,新增的唯一索引需要查询 2 次,第一次是查询索引树,第二次是查询数据页,而主键索引是唯一索引,所以查询主键索引时,只需要查询一次索引树即可。上面我们知道, 查询的消耗主要是在索引遍历的过程中, 如果id是连续递增的, 可以使用 WHERE 来优化。

2023-04-05 17:28:41 2200 2

原创 MySQL explain 和 profiling 详解

通过分析输出结果,我们可以看到 MySQL 使用了用户表的 age 列上的索引来过滤数据,然后使用了订单表的 user_id 列上的索引来查找订单,这个查询使用了索引优化的方法,可以更高效地执行。它返回一组关于查询执行计划的信息,包括用到的索引,表的连接顺序以及 MySQL 使用的查询类型。Using index condition:表示 MySQL 使用了索引中的条件进行过滤,这意味着 MySQL 能够在索引中解决查询条件,而无需查找表中的行。id:查询中每个 SELECT 子句或者操作的唯一标识符。

2023-04-05 17:26:41 792

原创 弯道超车的机会

我一直很想把自己思考的东西表达出来,苦于语文成绩差,文字功力不够,想来想去也不知道用什么话来开场。我不喜欢站在高处对别人指指点点,毕竟每个人都不一样,即使你有成功的经验又如何,照样教育不到我,而且成功对于我来说还为时过早。更何况即使人们懂得了道理,在现实中,知行合一的人一直是特立独行的猪,知而不行的人才是沉默的大多数。但是基于一种可笑的理想,我仍然尽力把自己经历想法分享出来,希望能给你带来一点点的思考。本文章首次撰写于2023年3月,一定是有局限性甚至错误。

2023-03-28 21:47:53 906 2

原创 golang 中实现的零依赖、高性能、并发 mysql 备份工具

golang 中实现的零依赖、高性能、并发 mysqldump 工具。

2023-03-25 18:27:44 453

原创 golang 实现的零依赖、高性能、并发 mysqldump 工具

项目地址: https://github.com/dengjiawen8955/mysqldump/blob/master/README-zh.md。文章地址: https://bmft.tech/#/2-program/0325-golang-implements-mysqldump。自定义 Writer: 如本地文件、多文件储存、远程服务器、云存储等。(默认控制台输出)。golang 实现的零依赖、高性能、并发 mysqldump 工具。支持 INSERT Merge, 大幅提升数据恢复性能。

2023-03-25 17:33:42 360

原创 我是如何构建自己的笔记系统的?

我的笔记系统可能并不完善, 而且带着极强的个人倾向性, 只希望它能提供给你一种思考的方向

2022-11-20 20:37:36 1514

原创 使用 cobra-cli 搭建手脚架

使用 cobra-cli 搭建手脚架 # 安装 cobra-cligo install github.com/spf13/cobra-cli@latest# 创建一个应用mkdir myapp && cd myapp# 初始化 go modgo mod init myapp# 使用 cobra-cli 搭建手脚架

2022-11-18 19:27:54 301

原创 DDD系列 实战一 应用设计案例 (golang)

DDD系列 实战一 应用设计案例 (golang)基于 ddd 的设计思想, 核心领域需要由纯内存对象+基础设施的抽象的接口组成独立于外部框架: 比如 web 框架可以是 gin, 也可以是 beego独立于客户端: 比如客户端可以是 web, 可以是移动端, 也可以是其他服务 rpc 调用独立于基础组件: 比如数据库可以是 MySQL, 可以是 MongoDB, 甚至是本地文件独立于第三方库: 比如加密库可以是 bcrypt, 也可以是其他加密库, 不会应为第三方库的变更而大幅影响到核心领域可测性:

2022-11-18 15:30:40 2728

原创 一步一步分析HTTPS加密机制

HTTPS(SSL/TLS)的加密机制虽然是大家都应了解的基本知识, 但是更多的时候我们只是在背诵一些概念, 比如: "对称加密", "非对称加密", "数字证书". 但是我们很少去思考 "为什么". 本文围绕 "为什么" 展开, 一步一步解开 HTTPS 的面纱.为什么要加密? 因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。

2022-11-02 21:12:14 376

原创 TCP和KCP协议

TCP协议KCP是一个快速可靠协议,能以比 TCP 浪费 10%-20% 的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。TCP 是为流量设计的(每秒钟多少 KB),KCP 是为流速设计的(RTT 时延多少毫秒)。KCP 参考 TCP 做了一些优化, 牺牲了带宽, 以换取更低的时延, 设计上

2022-10-21 15:47:07 2199

原创 nats 简介和使用

nats 简介和使用

2022-10-08 18:20:24 4448

原创 浅谈 golang 代码规范, 性能优化和需要注意的坑

浅谈 golang 代码规范, 性能优化和需要注意的坑

2022-09-30 11:23:29 558

原创 用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)

用IO多路复用实现 nginx 静态资源代理(C/Java/Golang)效果展示 代理 HTML代理 HTML代理图片代理图片注意, 静态资源代理基于 HTTP, 可以了解上一篇文章: 几十行代码使用TCP简单实现HTTP(C/Golang/Java) https://blog.csdn.net/jarvan5/article/details/117601456Java public static void main(String[] args)

2022-09-30 11:15:26 1111

原创 golang轻量级的代码复制粘贴检查器 cpd

golang轻量级的代码复制粘贴检查器 cpd项目地址: https://github.com/dengjiawen8955/copy-paste-detector基础架构快速开始 clonegit clone https://github.com/dengjiawen8955/copy-paste-detector.gitcd copy-paste-detector配置文件 vim cpd.tomlminRepeatLine = 4 # 最小重复行parse

2022-09-30 10:52:24 427

原创 浅谈Git架构和如何避免代码覆盖的事故

浅谈Git架构和如何避免代码覆盖的事故Git 不同于 SVN 的地方在于, Git 是分布式的版本管理系统, 所有的客户端和服务器都保存了一份代码, 涉及到仓库仓之间的同步, 所以处理不当极易造成冲突最直接的方法就是不让新手合并代码PR 开发: GitHub 开源项目常用开发方式, 开发者在自己的 仓库 上开发, 完成后提交 PR 给管理员审核合并MR 开发: 对代码要求比较严格的公司常用开发方式, 开发者在自己的 分支 上开发, 完成后提交 MR 给管理员审核合并但是这样每次都要等管理员审核,

2022-09-30 10:09:00 3224

原创 浅谈 MySQL 连表查询

浅谈 MySQL 连表查询连表查询是一把双刃剑, 优点是适应范式, 减少数据冗余; 缺点是连表查询特别是多张表的连表会增加数据库的负担, 降低查询效率.简介 连表查询就是 2 张表或者多张表的联合查询, 联合查询的结果称之为 "笛卡尔积", 假设 A 表中有 n 条记录, B 表中有 m 条记录, "笛卡尔积" 就是 n*m各种连表查询的本质就是对笛卡尔积的过滤全查询: 全量查询笛卡尔积, n*m 种结果, 不加关键字过滤内连接: 关键字是 INNER JOIN, JOIN, WHERE, 或者

2022-09-27 14:09:32 952

原创 vscode 版本比较插件 Git History Diff

背景:开发中一定要 review 自己的代码再提交, 因为没有 review 的代码和闭着眼睛写的没什么区别, 如果是小改动我们可以 review 单个 commit, 如果一个完整的功能设计到多个 commit 建议是拉分支然后 review 分支的不同。...

2022-08-18 16:10:59 5799

原创 wsl常用命令

记录下常用的命令, 更全的命令参考官方文档列出已安装的 Linux 发行版wsl -l -v更改发行版的默认用户<DistributionName> config --default-user <Username>关闭某个发行版wsl --terminate <Distribution Name>将某个发行版 WSL 设置为 1 或 2wsl --set-version <distribution name> <versionNum

2022-05-24 17:00:49 875 1

原创 Linux golang 开发环境配置(Vscode Remote)

Linux golang 开发环境配置(Vscode Remote)

2022-05-24 15:33:16 988

原创 [算法] leetcode golang 5. 最长回文子串多种解法

[算法] leetcode golang 5. 最长回文子串多种解法思路1: 暴力//思路1: 暴力O(n3)(超过5%)//遍历子字符串O(n2)//然后判断是否是回文O(n),记录最大的字字符串func longestPalindrome(s string) string { //参数处理 if len(s) < 2 { return s } //记录最大子字符串 maxStr := "" //遍历子字符串 fo

2022-04-22 13:44:12 270

原创 [算法] leetcode golang 4. 寻找两个正序数组的中位数 3种解法 暴力/第k个最小数字/二分

[算法] leetcode golang 4. 寻找两个正序数组的中位数 3种解法 暴力/第k个最小数字/二分思路1: 暴力(击败55%)//思路1: 将2个数组合并为一个新的数组然后取中位数//合并 O(n),O(n) 不符合要求//计算 O(1)func findMedianSortedArrays(nums1 []int, nums2 []int) float64 { //合并 nums3 := make([]int, len(nums1)+len(nums2)) p1, p2,

2022-04-10 15:05:16 871

原创 [算法] leetcode golang 3. 无重复字符的最长子串 2 种解法

[算法] leetcode golang 3. 无重复字符的最长子串 2 种解法思路1: 遍历+hash表 复杂度O(n2)固定一个数字,遍历后面的数字,用 hash表判断这个区间是否有重复的元素// 思路1: 遍历+hash表 复杂度O(n2)//固定一个数字,遍历后面的数字,使用hash表判断是否存在重复的数字func lengthOfLongestSubstring(s string) int { //参数判断 if len(s) < 2 { retur

2022-04-10 13:50:48 488

原创 [算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和

[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和题目1:思路1: 暴力模拟暴力模拟代码type NumMatrix struct { Matrix [][]int}func Constructor(matrix [][]int) NumMatrix { return NumMatrix{Matrix: matrix}}//start: 17:05//二维子矩阵的元素和//思路: 遍历子矩阵的每一行累加值即可func (this *NumM

2022-03-21 18:21:59 376

原创 [算法] 剑指offer2 golang 面试题12:左右两边子数组的和相等

[算法] 剑指offer2 golang 面试题12:左右两边子数组的和相等题目1:思路1://思路: //1.记录总数 sum//2.遍历元素计算 sum - nums[i] - leftSum == leftSum ,return i 代码func pivotIndex(nums []int) int { //start: 13.16 end: 13.22 //思路: //1.记录总数 sum //2.遍历元素计算 sum - nums[i] - le

2022-03-21 13:25:02 1025

原创 [算法] 剑指offer2 golang 0和1个数相同的子数组

[算法] 剑指offer2 golang 0和1个数相同的子数组题目1:思路1: 暴力//思路1: 暴力//将0当作-1看待,//固定一个,计算后面的位数是否总和位0,计算最大的个数,//O(n3),优化下计算时间复杂度O(n2)代码1func findMaxLength(nums []int) int { //返回最长的子数组的长度 //start :19.11 //思路1: 暴力 //将0当作-1看待, //固定一个,计算后面的位数是否总和位0,

2022-03-20 19:57:50 213

原创 [算法] 剑指offer2 golang 面试题10:和为k的子数组

[算法] 剑指offer2 golang 面试题10:和为k的子数组题目1:思路1: 暴力时间复杂度 O(n2)代码func subarraySum(nums []int, k int) int { //start: 13:51, 13:57 //思路1: 暴力,因为元素中有可能是负数 //固定一个数字i,记录后面存在的可能性 //参数校验 if len(nums) == 0 { return 0 } //暴力

2022-03-20 19:06:33 815

原创 [算法] 剑指offer2 golang 面试题9:乘积小于k的子数组

[算法] 剑指offer2 golang 面试题9:乘积小于k的子数组题目1:思路1: 滑动窗口代码func numSubarrayProductLessThanK(nums []int, k int) int { //start: 10:28,... end 11.23 //思路1: 滑动窗口 //参数处理 if len(nums) == 0 || k <= 0 { return 0 } //滑动窗口 res :=

2022-03-20 11:26:00 1114

原创 [算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组

[算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组题目1:思路1: 滑动窗口//思路: 滑动窗口//指针 [left,right] 记录连续子数组的区间,并记录区间和 sum//if sum < target; right ++ ;sum += nums[right]//if sum >= target; 更新最小长度 minLen; sum -= nums[left]; left++代码func minSubArrayLen(target int

2022-03-20 09:56:02 902

原创 [算法] 剑指offer2 golang 面试题7:数组中和为0的3个数字

[算法] 剑指offer2 golang 面试题7:数组中和为0的3个数字题目1:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a ,b ,c ,使得 a + b + c = 0 ?请找出所有和为 0 且 不重复 的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.

2022-03-19 21:24:00 336

原创 [算法] 剑指offer2 golang 面试题6:排序数组中的两个数字之和

[算法] 剑指offer2 golang 面试题6:排序数组中的两个数字之和题目1:给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次

2022-03-19 20:42:21 207

原创 [算法] 剑指offer2 golang 面试题5:单词长度的最大乘积

[算法] 剑指offer2 golang 面试题5:单词长度的最大乘积题目1:给定一个字符串数组 words,请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时,它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串,返回 0。示例 1:输入: words = [“abcw”,“baz”,“foo”,“bar”,“fxyz”,“abcdef”]输出: 16解释: 这两个单词为 “abcw”, “fxyz”。它们不包含相同字符,且长度

2022-03-19 20:34:05 210

原创 [算法] 剑指offer2 golang 面试题4:只出现一次的数字

[算法] 剑指offer2 golang 面试题4:只出现一次的数字题目1:给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。示例 1:输入:nums = [2,2,3,2]输出:3示例 2:输入:nums = [0,1,0,1,0,1,100]输出:100提示:1 <= nums.length <= 3 * 104-231 <= nums[i] <= 231 - 1nums 中,除某

2022-03-19 19:52:48 179

空空如也

空空如也

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

TA关注的人

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