自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

newbietao的博客

newbietao的博客

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

原创 揭秘Redis哈希表底层实现

因为在进行渐进式 rehash 的过程中, 字典会同时使用 ht[0] 和 ht[1] 两个哈希表, 所以在渐进式 rehash 进行期间, 字典的删除(delete)、查找(find)、更新(update)等操作会在两个哈希表上进行: 比如说, 要在字典里面查找一个键的话, 程序会先在 ht[0] 里面进行查找, 如果没找到的话, 就会继续到 ht[1] 里面进行查找, 诸如此类。每个 dictType 结构保存了一簇用于操作特定类型键值对的函数, Redis 会为用途不同的字典设置不同的类型特定函数。

2024-08-23 13:44:22 974

原创 一文掌握 Go 内存对齐

例如,对于一个 32 位的整数,如果存储在非 4 字节对齐的地址上,可能需要两次内存读取操作才能获取完整的数据,而在对齐的地址上,一次读取操作即可。内存对齐是一种将数据在内存中进行排列的方式,目的是提高内存访问的效率和保证数据的完整性。数据的内存排列方式最直观的体现就是数据的内存地址,说白了就是数据的内存地址要符合一定规则,以便于CPU读取,这个规则就是下面要讲的内存对齐规则。上面的输出和我们的结论是契合的,内存地址都是对齐值的倍数,另外还有一点,为了减少内存开销,编译器还会优化内存布局,减少内存碎片。

2024-08-23 13:40:49 1017

原创 揭秘Redis列表底层实现

介绍了 Redis 数据结构中的列表对象,包括其编码方式、ziplist 和 linkedlist 两种实现方式,以及相关的 API 源码。

2024-08-16 13:49:57 827

原创 揭秘Redis字符串底层实现

介绍了 Redis 中字符串对象的底层实现。文章首先介绍了字符串对象的三种编码方式,包括 int 编码、raw 编码和 embstr 编码。然后详细介绍了 embstr 编码的字符串对象在保存短字符串值时的优势,包括减少内存分配次数和提高缓存效率。接着介绍了 Redis 中使用的简单动态字符串(SDS)的定义和特点,以及与 C 字符串的区别。SDS 相比 C 字符串具有常数复杂度获取字符串长度、杜绝缓冲区溢出、减少修改字符串时带来的内存重分配次数等优势。文章还介绍了 SDS 的空间预分配和惰性空间释放机制,

2024-08-16 13:47:47 1073

原创 揭秘Redis对象底层实现

Redis 会在初始化服务器时, 创建一万个字符串对象, 这些对象包含了从 0 到 9999 的所有整数值, 当服务器需要用到值为 0 到 9999 的字符串对象时, 服务器就会使用这些共享对象, 而不是新创建对象。Redis 使用对象来表示数据库中的键和值, 每次当我们在 Redis 的数据库中新创建一个键值对时, 我们至少会创建两个对象, 一个对象用作键值对的键(键对象), 另一个对象用作键值对的值(值对象)。

2024-08-15 20:36:24 683

原创 深入理解 go unsafe

Go 是支持指针的语言,但是为了保持简洁、安全,Go 的指针有很多限制,但是一些场景又需要绕过这些安全限制,因此提供了 unsafe 包,unsafe 可以绕过:指针运算、不同的指针类型不能转换、任意类型指针等限制,进而可以实现更高级的功能。例如,如果 x 是一个切片,那么 Sizeof 返回的是切片描述符的大小,而非切片所引用的内存的大小。使用 unsafe 包时需要非常谨慎,因为不正确的使用可能会导致程序出现难以调试的错误,甚至破坏程序的稳定性和安全性,应仅在有充分理由和完全理解其风险的情况下使用。

2024-08-15 20:23:21 800

原创 万字长文揭秘高性能架构

当大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。当用户访问的数据,既不在缓存中,也不在数据库中,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。那么当有大量这样的请求到来时,数据库的压力骤增,这就是缓存穿透的问题。

2024-08-09 12:31:33 928

原创 深入理解 go reflect

反射的核心原理就是检查和操作变量的类型、值,Go 的反射通过 reflect.TypeOf() 、reflect.ValueOf() 来返回类型和值的相关信息,它们的返回值reflect.Type、reflect.Value 是实现反射的核心。Go 的函数参数是值传递,所以调用 reflect.ValueOf 时对 x 进行了拷贝,v 是由 x 的副本转换来的,v 并没有保存原始对象 x 的相关信息,所以 v 是不可以被设置的。可设置性是反射对象的一个属性,其本质是反射对象有没有保存原始的对象。

2024-08-07 14:00:24 896

原创 深入理解 Go 数组、切片、字符串

如果我们不知道数组中元素的数量,访问时可能发生越界;Go 语言切片可以看做对数组的封账,Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。使用copy()内置函数拷贝两个切片时,会将源切片的数据逐个拷贝到目的切片指向的数组中,拷贝数量取两个切片长度的最小值,例如长度为10的切片拷贝到长度为5的切片时,将会拷贝5个元素,也就是说,copy过程中不会发生扩容。

2024-07-31 13:00:01 322

原创 深入理解 go context

context 是 Go 语言中用于处理并发操作的一个重要概念。context也被称作上下文,主要用于在 goroutine 之间传递截止日期、取消信号和其他请求范围的值。Deadline(): 返回与 Context 关联的截止时间。如果没有设置截止时间,则返回 zero time.Time 和 false。Done(): 返回一个 channel,当 Context 被取消或者截止时间到达时,该 channel 会被关闭。Err(): 返回 Context 被取消的原因。

2024-07-31 12:47:57 145

原创 深入 go interface 底层原理

fun 字段则是一个动态大小的函数指针数组,当fun[0]=0时,表示_type并没有实现该接口(这里指的是itab下的_type),当实现了接口时,fun存放了第一个接口方法的地址,其他方法依次往后存放。对于接口判断 == nil 时,只有接口所指向的类型和值都为 nil 时接口才为 nil,如果想比较准确的判断接口类型是否是 nil 可以使用反射实现,但是有一定性能开销。提高代码的灵活性和可维护性:当低层模块的实现发生变化时,高层模块不需要进行大量的修改,只需要更改依赖的抽象的实现即可。

2024-07-31 12:44:56 462

原创 深入理解 go map

介绍了哈希表在计算机科学中的重要性以及哈希表的设计和实现。哈希表是一种用于维护集合数据并支持增删查改操作的数据结构,其性能取决于哈希函数和冲突解决方法的选择。哈希函数的输出范围应该大于输入范围,以尽可能均匀地分布哈希结果,从而减少哈希冲突和提高读写性能。冲突解决方法包括开放寻址法和拉链法,开放寻址法通过遍历数组来查找目标键值对,而拉链法则通过使用链表来解决哈希冲突。哈希表的内存模型包括桶和键值对,桶内最多可存储 8 个键值对,当桶已满时,需要创建新的桶来存储更多的键值对。在创建 map 时,可以使用语法`m

2024-07-10 19:48:24 1139

原创 Go 常用关键字

1. 本文介绍了 Go 语言中的三个关键字:make、new 和 defer,以及它们的作用和使用场景。2. 详细介绍了 Go 语言中的 panic 和 recover 机制,包括它们的作用、使用方法和注意事项。3. 最后,文章还介绍了 Go 语言中的 for range 循环语句,以及它在不同数据类型上的遍历过程和注意事项。

2024-07-10 19:45:19 574

原创 MongoDB 学习笔记——性能优化与监控

创建合使用索引限定返回结果条数只查询必要字段使用Capped Collection使用强制索引读写分离分片

2019-02-27 09:09:30 229

原创 MongoDB 学习笔记——复制集与分片

复制集分片复制集与分片配合

2019-02-26 20:01:14 509 1

原创 MongoDB 学习笔记——基础知识

安装、启动、停止、MongoDB概念数据库与集合操作文档操作运算符内置函数备份与恢复性能与监控

2019-02-26 19:57:32 233

原创 vim学习笔记——基础用法

文章目录键盘图模式切换移动光标进入插入模式文本编辑(删除、复制、剪切、粘贴、撤销)查找替换编辑多个文件技巧ctags和Tlist的安装和使用键盘图模式切换移动光标命令说明shift 6(^)至本行第一个非空字符shift 4($)至本行末尾w至下一个单词、标点开头W至下一个单词开头b至上一个单词、标点开头B至上一个单词开头...

2019-01-26 09:37:41 432

原创 PHPExcel快速入门

下载及使用下载最新的PHPExcel下载地址已经迁移到github上,网址:https://github.com/PHPOffice/PHPExcel, 可以克隆也可以直接下载zip压缩包。使用下载好的压缩包解压好后的文件夹里面有一个Classes文件夹,这个文件夹里面放的就是PHPExcel的源码,使用PHPExcel之前需要引用Classes文件夹里面的PHPExce...

2018-07-04 20:33:40 362

原创 HTTP初识

本篇是我学习http的笔记,其中很多都是参考和引用前辈总结出的经验,其中的很多图片都是来自《图解HTTP》。感谢 菜鸟教程 ,图解HTTP。HTTP基础什么是httpHTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于...

2018-07-01 16:44:33 205

原创 redis的安装、配置、启动、登录

一、安装1.下载:# wget http://download.redis.io/releases/redis-4.0.9.tar.gz2.解压:# tar xzf redis-4.0.9.tar.gz3.编译:# cd redis-4.0.9 # make说明:所有操作均是在centos7下进行的,并且redis的目录我放到了/opt/下。二、简单配置1.建立redis配置目录# m...

2018-04-15 21:14:54 1076

原创 shell后台并发执行的最佳实践

一、shell如何在后台执行1.nohup命令通常我们都是远程登录linux终端,而当我们退出终端时在之前终端运行的程序都会终止,有时候先想要退出终端也要程序继续执行这时nohup就登场了。nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。nohup command > myout.file 2>&1 &2.&后台执行...

2018-04-14 16:28:42 20056 3

原创 PHP安装扩展

一、php扩展管理1.什么是php扩展php扩展就是php核心并不支持的功能,然后可以通过扩展的方式进行扩展PHP的功能,常见的扩展如MySQL,gb2等等。2.查看php安装了那些扩展方法一:通过phpinfo()函数,进行查看,红框的都是php的扩展方法二:执行php -m 命令:方法三:使用php的get_loaded_extensions()函数<?php print_r(g...

2018-04-14 12:09:40 3205 1

原创 基于yum的la(n)mp环境搭建

一、安装mysql1.下载MySQL Yum仓库的RPM安装包# wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm2.安装mysql yum源# yum localinstall mysql57-community-release-el7-11.noarch.rpm3. 查看yum源是否安装成功4....

2018-04-07 15:28:54 446

原创 nginx实用配置

一、简介1、Nginx服务目录结构介绍安装完成后,在安装路径下就会有Nginx目录信息nginx├── client_body_temp ├── conf #nginx服务配置文件目录│   ├── fastcgi.conf #fastcgi配置文件│   ├── fastcgi.conf.default│   ├── fastcgi_params #fastcgi参数配置文件│   ├── fa...

2018-04-07 15:12:58 1138

原创 apache常见配置

常用的配置文件: /etc/httpd/conf.d/*.conf ###辅助配置文件 /etc/httpd/conf/httpd.conf ###主配置文件 /etc/sysconfig/httpd ###httpd工作模式配置文件apache配置主要就是修改配置文件,apache的主配置文件在/etc/httpd/conf/htt...

2018-04-07 14:55:54 1057

原创 为linux添加一个垃圾桶

就在刚才迷迷糊糊的就把 /usr 给 rm -rf 了,当时身上冷汗都冒出来了。好在只是工作和学习的云主机上边的内容并不重要,于是就重新做系统了。这些都不是重点重点是怎么能避免下一次再犯这样的低级错误,下面我给大家提供了一个解决方案。1.添加一个垃圾桶   在根目录下创建一个trash目录,并将目录权限修改为755。# cd /# mkdir trash# chmod 755 trash2.编...

2018-04-06 15:41:27 1705

原创 nginx安装详解

一、安装1.准备工作  Nginx的安装依赖于以下三个包,意思就是在安装Nginx之前首先必须安装一下的三个包,安装顺序为我写的顺序:SSL功能需要openssl库$ wget https://www.openssl.org/source/openssl-1.0.2o.tar.gzgzip模块需要zlib库,$ wget http://www.zlib.net/zlib-1.2.11.tar.gz...

2018-04-01 15:15:56 193

原创 linux 系统管理

一、进程管理1.什么是进程就是正在运行的程序2.进程管理的作用判断系统健康状态查看系统中所有进程杀死进程3.进程的查看ps命令ps aux #列出系统的所有进程,aux前面不能加-,否则会出现一条警告ps -le #列出系统的所有进程,linux 标准格式选项:-a:显示一个终端的所有进程-u:显示进程的归属用户和内存使用情况-x:显示没有终端控制的进程-e:显示所有进程-l:长格式显示,显示...

2018-03-29 10:03:02 252

原创 linux服务管理

一、简介与分类1.系统的启动级别 linux系统有七个运行级别运行级别的相关命令runlevel 查看系统的运行级别说明:runlevel会输出两列数据,第一列是之前的运行级别,第二列是现在的运行级别init level 切换系统的运行级别注意:使用init 0和init 6进行关机或者重启不安全,有可能没有正确的关闭服务系统的默认运行级别系统默认的运行级别在/etc/inittab的配置文件中。...

2018-03-27 11:04:07 232

原创 linux软件安装详解

一、linux的软件包都有那些1.源码包:如software-1.2.3-1.tar.gz。源码包里面放的是软件的源码,是开源的如果能力够强我们可以修改和自定义软件。2.二进制包(rpm、deb):二进制包里面放的是已经编译好的二进制文件,主要分为以下两类rpm:如software-1.2.3-1.i386.rpm。它是Redhat Linux提供的一种包封装格式。deb:如software-1....

2018-03-26 15:39:54 387

原创 三十分钟学会shell

本篇文章,你可以把它当做shell的入门教程来学习,你也可以把它当做shell学习的大纲,对应这里的每一个知识点进行更深入的学习(查资料或者看书),对于不是专业的Linux运维人员来说<<Linux shell 脚本攻略>>和<<Linux 命令行大全>>这两本书足够应付日常使用Linux的大部分问题.在这里附上学习shell时的小例子:https:...

2018-03-22 16:16:49 536 2

原创 H5 input type=search 搜索按钮的设置

转至元数据结转至元数据起始一、问题设计搜索框时如果,单单使用input type=search 会导致一些手机的输入法不显示搜索按钮只显示换行如:二、解决办法解决这个问题可以在input标签外嵌套form标签    问题解决了:三、注意事项嵌套form标签之后可能影响input提交逻

2017-10-13 10:23:50 18986 4

原创 移动web开发——touch的那些事

转至元数据结尾转至元数据起始移动端web开发,touch的应用是不可避免的,下面我就分享一下我再开发中的收获和学习的一些心得一、什么是touchtouch是一种针对移动触屏设备的一种交互形式。早期的ios为了向开发人员提供一些特殊信息,新增了一些新的事件,随着安卓的webkit的出现这些事件已经成为标准化。touchstart:当手指

2017-09-22 16:20:45 278

转载 viewport 的学习重点

重新学习了一下viewport的相关知识,感觉网上的很多文章写的都很不错,感觉自己在写一篇没有多大意义,所以就在这里总结一下学习重点,并附上一篇感觉写的不错的文章。1.理解三种viewport2.理解css像素与物理像素的区别3.懂得如何设置meta标签的相关属性下面我贴了一份感觉写的不错的文章移动前端开发之viewport的深入理解在移动设备上进行网页的重构或

2017-09-20 15:47:24 206

原创 web前端错误监控

在当今的互联网时代,web开发越来越受到重视,网页能实现的功能也越来多,之前只能在客户端上运行的程序,也逐渐转到网页上,面对成千上万的用户,出现错误的概率也是越来大。项目上线前期的粒度较大的错误我们都会在自测和QA测试中发现,然而上线之后的错误就不是那么好发现。同时移动端的开发也面临着一个问题就是不好调试,所以web开发的错误监控是一个非常有用的措施。下面我就分享一下我对错误监控的浅显认识。一

2017-09-18 13:59:06 3765

原创 面试准备

其实我也是一个实习生,写这篇文章的目的是为了我的一个同学面试环节: 一面(导师面:基础知识) 、二面(高工面:项目、技术栈、技术栈的深入、一些底层的原理)、三面(经理面:考察能力)hr面:考察人一、职位描述:分析招聘信息,理解任职要求,目的是确定你在公司将要从事什么样的工作,需要什么技能,并且准备简历和面试时要贴近公司的要求。下面以京东为例:二、

2017-09-16 16:49:12 379

原创 移动端开发——吸顶效果的解决方案

一、前言吸顶效果是web开发中一种常见的交互方式,常见的应用场景有导航、搜索框等等。(图片来自其他博客,感谢博主)二、在移动端开发遇到的问题吸顶效果的基本的开发思路,利用scroll事件进行监听scrollTop的值,当scrollTop达到一定的值得时候设置吸顶元素的position : fixed;属性。但是问题是:安卓支持scroll事件和fixed属性,但是ios8.0

2017-09-12 13:36:07 10446

原创 移动端web性能——动画

移动端web开发,性能一直是值得关注的问题,今天我就和大家分享一下,我在开发过程中遇到的一个性能问题,以及我的优化过程。背景:还是我那个人流量卡片,上周修复了低端安卓机(安卓4.0不触发touchend)不能滑动的问题,但是新的问题又出现了,上周五QA手拿了几个古董机找到了我,说滑动有卡顿。问题定位:高端机没有问题,只有低端机有卡顿现象,我认为有两种可能1.兼容性问题:有可能就

2017-09-11 10:12:42 879

原创 移动端开发踩坑日记——安卓4.4.2不触发touchend事件

背景:最近在公司开发一个景区人流量卡片要求:卡片类似轮播图,可以左右滑动查看不同的数据问题:在低端安卓机左右滑动无响应(安卓4.4.2)解决过程:1.确定问题所在:我首先考虑到的但是性能问题,由于在touchmove事件中的处里函数非常浪费 性能,所以我再touchmove事件的处里函数里面进行了节流,问题还是没有解决,不但没有解决反而其他的高端机型也变得非常卡顿。然后我又考虑是不

2017-09-09 11:52:39 2159

空空如也

空空如也

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

TA关注的人

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