goStringBuilder使用
go strings.Builder 使用前言本人最近在找工作,面试的时候有一个手撕题目,这里题目描述如下: 问题描述12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152// 实现一个textProcessor, 要求能够将对应的文本中的tag转换为之前设置过的内容:// 示例如下// set_variable("name", "lixiande")// get_text("Dear interviewer [name], welcome to our interview! ) // 应当是Dear interviewer lixiande, welcome to our interview!// 由于最近使用go比较多,所以直接使用go实现type TextProcessor struct { record map[string]string}func NewTextPro...
从三色旗到快排
从三色旗到快排三色旗问题使用一次遍历将一堆0,1,2的数字按序放在不同区域,形成0..01..12..2的数组,这个问题解决方法可以两个指针分别指向下一个 0 要占据的坐标、下一个 1 要占据的坐标: 123456789101112131415161718192021func partition(nums []int){ p0, p1 := 0,0 for i := 0; i < len(nums);i++{ if nums[i] == 0 { // 当前数为0则占据p0现在的位置,并将数据交换 nums[p0], nums[i] = nums[i], nums[p0] // 如果p1>p0代表最少有一个1也就是当前序列是0...0 1...1 xxxxxx // 此时p0指向的是第一个1的位置,发生替换相当于将第一个1换到了0, // 然后第一个1去了i的位置,这个时候需要换回来 ...
Lua实现数据拦截和简单的依赖收集
仿写 vue - 实现数据拦截和简单的依赖收集简单仿写 vue step1 拦截赋值和取值操作拦截数据访问和获取关系 123456789101112131415161718192021222324252627282930313233343536373839404142function newProxy(model) local t = {} local raw = {} if type(model) ~= "table" then return model end for k, v in pairs(model) do raw[k] = newProxy(v) end setmetatable(t, { __index = function(t, key) print("get key " .. key) return raw[key] end, ...
lua数据劫持
vue proxy实现 之前尝试实现vue数据劫持,里面有一些方法实现不是很好,经过查阅lua.org,实现了基本操作的劫持; 基本数据类型lua作为一个脚本语言没有封装更多的数据结构,除了原生的number、string、boolean、数据结构,其他数据都是table,和js不同的是 table 没有区分出list和map两种,这里为了方便区分,封装了一个简单区分的方法 123456789101112131415---@param model tablefunction isArray(model) -- 连续数据区长度大于0 return #model > 0endfunction isMap(model) local len = #model -- 当len为0的时候 next会出错, 默认为true if len == 0 then return true end -- 除了array区域还有数据,则为map return next(model, len) ~= nilend 有了这两个数据类型我们可...
缓存设计
缓存设计 在读多写少的服务中,可以通过缓存将一些代价较为高昂的请求结果保存,比如对数据库的读取请求或者一些复杂操作结果进行保留,实现较高的性能。因而缓存是一个比较通用但是又效果良好的手段去增强我们的服务性能。 缓存结构缓存一般有三个对象即请求方、缓存、存储层;请求方一般是想要获取存储层的数据,但是存储层数据往往可能会涉及磁盘 io 导致请求时间开销较大,因而使用内存缓存请求结果,下次获取同样的数据先在缓存层获取再在存储层获取: 缓存优缺点优点 降低响应时间,内存操作一般在 100ns 之内而涉及请求或者磁盘 io 的性能一般至少在 10ms 左右,因此使用内存缓存能够极大降低系统吞吐能力和响应时间; 降低后端负载,使用缓存能够极大程度降低下游负载,尤其是对于很多服务都在用的存储层而言,降低负载能够减少存储层崩溃的可能; 缺点 增加复杂度,最简单的增加一个缓存层会增加代码层面的复杂度,增加一个缓存中间件会增加整体系统的复杂度; 数据一致性问题:缓存层和存储层中间数据同步过程中会有一定的时间出现缓存数据和存储数据不一致; 虽然如此,但是缓存的效果太好,一般而言,如果同一份数据会...
detectron2 windows 安装过程
什么的是detectron2detectron2 是fair开发的目标检测、语义分割等的对比平台,集成了很多适合用来快速构建自己的目标检测、语义分割的模型和对应的预训练模型,但是官方文档里面只有linux和mac上的安装过程,虽然双系统很不错,但是还是windows能完成是最好的,所以这里介绍windows下需要进行的一些安装配置过程。总的来说分为一下几步: python安装 cuda和cudnn安装 pytorch 1.3安装 detectron2 windows安装 python 安装当然,windows上需要面对很多奇怪的库的配置,和虚拟环境的需求(虚拟环境真的很重要),所以我选择conda,我电脑上安装的是anaconda3.7的版本,基本上就是截止到目前最新的版本了。但是pytorch环境的版本还是选择了目前来说最为稳定的python3.6,说句实话,几年前配置caffe的时候让我认识到版本这个东西真的很重要,差一点就等同于没有环境。那么还是那样,先创建相应的环境,在此之前先检查一下conda有没有添加到路径中:conda -v ,若是报错就是
My first hexo blog about how to deploy hexo
为什么写博客、在学生生活中,无聊是最为恐怖的事情,那么怎么避免太过无聊的事情呢,当然是写点什么记录自己的生活,但是日记又太过无聊(我的字丑),而跟风写一下博客就还行。 怎么配置hexo博客写博客当然是要找一个教程比较多,起点低的方法,其中hexo博客要求很低(windows下面,有一个github账号就可以完成相应的配置),其次hexo的工作流也是一个和未来找工作比较相关工作流(git流程),所以使用hexo进行相应的配置。下面是正式配置过程 环境安装我是在windows下进行的配置,所以相对来说都是有界面的比较简单,总的来说需要以下几个windows不自带的东西 git npm ssh(使用的putty) 相应的markdown编辑软件(我用的vscode+markdown all in one)下面进行相应的安装介绍 git 安装简单来说就是按照官方给的教程一步步来安装git,因为git之前我已经搞过了,所以忘了具体的流程,需要注意到的是windows下的不一定会自动添加路径,有可能需要自己添加,如何检查自己的git是否安装好,只需要打开powershell(powers...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment