自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

翻译 Golang Woker池和Job队列模板

Golang Worker池Job队列这个模板是考虑用作字段校验的,之前是通过维护两个channel woker和result来实现监听的字段校验,但是这种方式是需要先全部校验完才能去遍历结果,而且我这里还需要根据数据的总长度来申请channel的缓存大小,这个方式非常不好,所以后续更改为这个模板通过控制Goroutine复用来限制并行的数量。后续还考虑过将所有的接口的封装成这种形式,但是这样无疑会降低接口的并发量,和同事讨论觉得这种形式还是存在一些业务场景的。package Plugimpor

2022-01-11 11:26:36 423

转载 MySql 加锁分析

首先概述几个概念:1、锁类型共享锁(S锁):假设事务T1对数据A加上共享锁,那么事务T2可以读数据A,不能修改数据A。排他锁(X锁):假设事务T1对数据A加上共享锁,那么事务T2不能读数据A,不能修改数据A。我们通过update、delete等语句加上的锁都是行级别的锁。只有LOCK TABLE … READ和LOCK TABLE … WRITE才能申请表级别的锁。意向共享锁(IS锁):一个事务在获取(任何一行/或者全表)S锁之前,一定会先在所在的表上加IS锁。意向排他锁(IX锁):一个事务在获

2022-01-07 10:35:31 202

原创 Gorm 简单应用

Gorm 简单应用package mainimport ( "fmt" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/plugin/soft_delete" "log" "os" "time")// odf和odfhistory共有的字段结构,单独列出来,然后不同的再在其自己的结构体中设计type OdfModels struct { ID int `json:"id"

2022-01-04 13:57:09 684

原创 Golang 实现LFU缓存淘汰算法

package mainimport "fmt"type Node struct { Key int Value int freq int pre *Node next *Node}type LFUCache struct { limit int HashMap map[int]*Node head *Node end *Node}func LFUConstructor(capacity int) LFUCache{ lfuCache := LFUCache{}

2021-12-23 15:04:52 545

原创 LeetCode 二叉树

package maintype TreeNode struct { Val int Left *TreeNode Right *TreeNode Next *TreeNode}func preorderTraversal1(root *TreeNode) []int { res := []int{} if root == nil{ return res } stack := []*TreeNode{} for root != nil || len(stack) != 0{

2021-12-23 13:30:33 3409

原创 Golang 实现LRU缓存淘汰算法

package mainimport "fmt"type Node struct { Key int Value int pre *Node next *Node}type LRUCache struct { limit int HashMap map[int]*Node head *Node end *Node}/* Constructor * @Description: 实例化一个指定容量的LRU * @param capacity int * @retur

2021-12-23 12:02:00 339

原创 C++虚函数表——套娃的指针

前言面向对象的程序设计最重要的三个特点是:多态、继承、封装。在C++中,为了实现多态,使用了一种动态绑定的方法。这个方法的核心表现形式就是C++的虚函数表,本文主要是验证虚函数表的一些特点(PS:就是有个臭毛病,书上说的不太信,非要自己验证一番)。类的虚函数表所谓虚函数,就是在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。用法格式:virtual 函数返回类型 函数名(参数列表){函数体};(PS:最明显的标志就是virtual,被virtual修饰的就是虚函数)

2020-11-30 15:18:57 530 1

原创 Leetcode日常练习

5. 最长回文子串给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”思路解析:动态规划a. 定义dp[i][j] 表示字串s[i][j]是否为回文字串。b. 状态方程:根据长度作出不同的判断:如果长度为1:dp[i][j] = 1;如果长度为2:dp[i][j] = (s[i] == s[j]);如果

2020-11-23 16:26:25 179

转载 面试题——操作系统

内容进程线程模型线程和进程的概念已经在操作系统书中被翻来覆去讲了很多遍。很多概念虽然都是套话,但没能理解透其中深意会导致很多内容理解不清晰。对于进程和线程的理解和把握可以说基本奠定了对系统的认知和把控能力。其核心意义绝不仅仅是“线程是调度的基本单位,进程是资源分配的基本单位”这么简单。多线程我们这里讨论的是用户态的多线程模型,同一个进程内部有多个线程,所有的线程共享同一个进程的内存空间,进程中定义的全局变量会被所有的线程共享,比如有全局变量int i = 10,这一进程中所有并发运行的线程都可以读取

2020-11-22 23:47:25 433 1

转载 面试题——计算机网络

网络层(IP)待补充传输层(TCP/UDP)ISO七层模型中表示层和会话层功能是什么?表示层:图像、视频编码解,数据加密。会话层:建立会话,如session认证、断点续传。描述TCP头部?序号(32bit):传输方向上字节流的字节编号。初始时序号会被设置一个随机的初始值(ISN),之后每次发送数据时,序号值 = ISN + 数据在整个字节流中的偏移。假设A -> B且ISN = 1024,第一段数据512字节已经到B,则第二段数据发送时序号为1024 + 512。用于解决网络包乱序问题。

2020-11-22 23:44:55 131

原创 《C++ primer》——第6章

《C++ primer》——第6章6.1 函数基础形参:就是定义or声明函数时需要的参数名。例如:声明函数void func(int a, int b){/…/}在这里 a , b就是形参,只有名字和类型,没有其他具体的含义。实参:调用函数时传递的变量参数例如:调用函数 func(2,3);在这里2 , 3就有具体的含义。形参:声明变量的作用,告诉其他人,调用我这个函数需要给我什么样的参数。实参:赋值初始化的作用,调用函数时,把该值赋值给形参变量。局部变量:形参和函数体内部定义的变量

2020-11-22 16:58:21 171

转载 面试题——编程语言C/C++

编程语言(C/C++)都是语言,为什么英语比C++难这么多呢?编程基础C/C++的内容又多又杂,常常看到有人罗列相关书单,觉得毫无意义,我不相信他们真的完全掌握了其中任何一本。学习任何东西,首先要掌握基本概念,基础不牢地动山摇,因为高级的内容都是通过低级的概念来描述的。当基本概念都没理解透,学习再多都是空中楼阁。这里罗列了一些听基本的问题,虽然看着不难,但是精确理解每句话中的每个词真的并不容易。变量声明和定义区别?声明仅仅是把变量的声明的位置及类型提供给编译器,并不分配内存空间;定义要在定义

2020-11-22 16:56:12 305

空空如也

空空如也

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

TA关注的人

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