你会处理 go 中的 nil 吗

2023-10-28
阅读 2 分钟
517
对于下面这段代码,我们知道 i 实际上的值就是 nil,所以 i == nil 会生效 {代码...} 现在换一种写法,我们将 i 的类型改成 interface{},i == nil 依然会生效 {代码...} 我们接着改造,将 i == nil 的逻辑封装成函数 IsNil {代码...} 然后居然发现 IsNil 中的 i == nil 不生效了,为什么呢?因为对于 interface{} 类型...
封面图

Redis 源码:Redis 网络模型、通信协议和内存回收

2023-10-23
阅读 12 分钟
726
文件描述符(File Descriptor):简称 FD,是一个从 0 开始递增的无符号整数,用来关联 Linux 中的一个文件,在 Linux 中,一切皆文件,例如常规文件、视频、硬件设备等,当然也包括网络套接字(Socket)
封面图

Redis 源码:图解 Redis 五种数据类型

2023-10-17
阅读 11 分钟
410
如果存储的 SDS 小于等于 44 字节,则采用 EMBSTR 编码,此时 Object Head 与 SDS 是一段连续空间,申请内容时,只需要调用一次内存分配函数,效率更高
封面图

Redis 源码:图解 Redis 六种数据结构

2023-10-13
阅读 13 分钟
497
type 表示数据类型,如 string、hash、list、set、zset、bitmap 等,占用 4bit这些类型在 Redis 内部有预定义OBJ_STRING 0
封面图

Redis 基本命令

2023-10-06
阅读 6 分钟
372
redis 安装 {代码...} 切换数据库 {代码...} 查看当前数据库大小 {代码...} 清空数据库 {代码...} key 相关所有 key {代码...} key 是否存在 {代码...} 把 key 移动到指定数据库 {代码...} 设置过期时间 {代码...} 查看 key 的类型 {代码...} String 相关追加如果 key 不存在,那么它的值会被初始化为空字符串,然后再追...

LeetCode mysql 刷题六:指定日期的产品价格——3种方法处理未查询到日期

2023-09-26
阅读 4 分钟
708
题目题目链接:指定日期的产品价格编写一个解决方案,找出在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。以 任意顺序 返回结果表。结果格式如下例所示。 {代码...} {代码...} 解析这题考察的点是如何查出 product_id 为 3 的数据,因为这个产品在 2019-08-16 之前没有修改过价格方法一思路:查...

LeetCode mysql 刷题五:按分类统计薪水——用5种方法处理不存在的数据但要显示的数据

2023-09-25
阅读 3 分钟
602
题目题目链接:按分类统计薪水查询每个工资类别的银行账户数量。 工资类别如下:"Low Salary":所有工资 严格低于 20000 美元。"Average Salary": 包含 范围内的所有工资 [$20000, $50000] 。"High Salary":所有工资 严格大于 50000 美元。结果表 必须 包含所有三个类别。 如果某个类别中没有帐户,则报告 0 。按 任意...

LeetCode mysql 刷题四:餐馆营业额变化增长——用自连和窗口函数 4 种 sql 实现过去 7 天的营业额

2023-09-23
阅读 8 分钟
1.2k
题目题目链接:餐馆营业额变化增长你是餐馆的老板,现在你想分析一下可能的营业额变化增长(每天至少有一位顾客)。计算以 7 天(某日期 + 该日期前的 6 天)为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。结果按 visited_on 升序排序。返回结果格式的例子如下。 {代码...} {代码...} 本题考察的知识...

LeetCode mysql 刷题三:确认率——MySQL 中的 null 处理 | 判断三角形的四种方法

2023-09-20
阅读 4 分钟
1.1k
用户的 确认率 是 'confirmed' 消息的数量除以请求的确认消息的总数。没有请求任何确认消息的用户的确认率为 0 。确认率四舍五入到 小数点后两位 。

LeetCode mysql 刷题二:电影评分——判断日期的五种方法 审核中

2023-09-19
阅读 5 分钟
1.3k
题目题目链接:电影评分请你编写一个解决方案:查找评论电影数量最多的用户名。如果出现平局,返回字典序较小的用户名。查找在 February 2020 平均评分最高 的电影名称。如果出现平局,返回字典序较小的电影名称。字典序 ,即按字母在字典中出现顺序对字符串排序,字典序较小则意味着排序靠前。返回结果格式如下例所示。...

LeetCode mysql 刷题一:计算特殊奖金 | 买下所有产品的客户

2023-09-18
阅读 4 分钟
786
实际开发中 sql 的高级用法并不常用,特别是在做数据库迁移时,高级用法简直是噩梦只满足于简单的查询,然后用代码实现相关逻辑,又感觉自己的 sql 能力太弱通过 leetcode 中数据库相关的练习题,刷下题目,增加下自己的 sql 能力leetcode 只提供了 MySQL 和 Oracle 两种数据库,我是用 MySQL 刷题的下面两条题目:第一...

提升前端开发体验:利用 Dev Containers 实现高效开发

2023-07-01
阅读 5 分钟
5.5k
本项目灵感来自于方方老师的oh-my-docker我在此基础上进行了魔改,主要学习 dev containers 以及 docker 的基本使用感谢方方老师的分享你是否遇到过这些情况:维护多个不同版本的项目时,在各个环境中不停的切换项目交接给别人,别人在自己的环境无法运行,要你解决换一台电脑就要重新配置环境还有一些其他情况就不一一...
封面图

gis 开发中 pixel、meter、tile、lnglat 互相转换

2023-06-25
阅读 4 分钟
1k
完整源码:pixel、meter、tile、lnglat 互相转换在地图开发中,会遇到 pixel(像素)、meter(米)、tile(瓦片)、lnglat(经纬度) 之间的转换它们之间的转化看似很复杂,其实只要理解了其中的原理,就会发现它们之间的转换是很简单的,它们最底层的转换是:pixel 和 meter 之间的转换lnglat 和 meter 之间的转换其他...
封面图

一行代码搞定前端可视化大屏

2023-06-03
阅读 3 分钟
3.4k
github 地址:[链接]npm 地址:[链接]大屏适配解决方案做可视化大屏时,在适配屏幕上,有四种常用的解决方案:根据屏幕尺寸随意缩放适用场景:留白不可接受的情况下使用优点:占满屏幕,美观缺点:屏幕尺寸比和设计稿尺寸比不一致时,导致变形固定大屏头部,内容部分自适应适用场景:图表变形不可接受的情况下使用优点:...
封面图

组件卸载时 DOM 树的自动清理机制是怎样的

2023-04-18
阅读 4 分钟
1.3k
本文对应的 react 版本是 18.2.0通过上两讲:掌握 React 组件树遍历技巧useEffect 返回的函数是怎么执行的我们已经知道了 react 是如何找到 passive effect 返回的函数那么找到这个函数后,怎么执行这个函数呢我们先来看下面这段代码: {代码...} 一个组件中有两个 passive effect 返回的函数,react 是怎么安排执行的顺...
封面图

useEffect 返回的函数是怎么执行的

2023-04-16
阅读 5 分钟
1.6k
本文对应的 react 版本是 18.2.0在掌握 React 组件树遍历技巧中说到 react 是怎么遍历 dom那么在遍历的过程中,如果发现当前节点有子节点被删除了,那么 react 会怎么处理呢?下面是源码简化:这里是完整的源码 {代码...} deletions在正式开始之前,我们要了解一个 fiber 的属性:deletions这个属性存放的是当前节点中被...
封面图

掌握 React 组件树遍历技巧

2023-04-13
阅读 2 分钟
5.1k
commitPassiveUnmountOnFiber 处理不同的 WorkTag,并调用 recursivelyTraversePassiveUnmountEffects
封面图

写给小白的地理信息的表示法:GeoJSON

2023-04-11
阅读 6 分钟
6k
GeoJSON 是一种使用 JSON 来编码各种地理数据结构的格式,是一种轻量级的数据交换格式,可以用来表示几何对象、属性数据、空间参考系统等信息
封面图

《图解 Google V8》事件循环和垃圾回收——学习笔记(三)

2023-02-10
阅读 6 分钟
1.7k
这是《图解 Google V8》第三篇/共三篇:事件循环和垃圾回收这里主要讲了 2 点:事件循环:宏任务和微任务什么是微任务微任务的执行时机垃圾回收垃圾回收运行过程垃圾回收算法通过这个专栏的学习,V8 不在是个陌生的黑盒了,变成了一个熟悉的黑盒,因为这个专栏让你了解了 V8 的大致原理,面试时吹吹牛皮还是可以的,不过...
封面图

《图解 Google V8》编译流水篇——学习笔记(二)

2023-02-08
阅读 9 分钟
1.1k
这是《图解 Google V8》第二篇/共三篇:编译流水线学习下来最大的收获有两点:V8 如何提升 JavaScript 执行速度早期缓存机器码,之后重构为缓存字节码在 JavaScript 中访问一个属性时,V8 做了哪些优化隐藏类内联缓存特别是第二点,让我看到了使用 TypeScript 的好处,动态语言存在的问题,静态语言都可以解决09 | 运行...
封面图

《图解 Google V8》设计思想篇——学习笔记(一)

2023-02-07
阅读 4 分钟
1.7k
这个专栏的优点是:写的通俗易懂,没有涉及 V8 源码部分,对于前端还是比较友好的,学完之后能够知道写下一段 js 代码后,V8 背后都做了哪些事情
封面图

如何在 React 中优雅的使用 addEventListener

2023-01-30
阅读 6 分钟
4.8k
在 React Hooks 中使用第三方库的事件时,很多人会写成这样(指的就是我): {代码...} 这样写会有问题:它只会在这个组件加载时,绑定事件,如果这个事件中用到了其他的 state,那么这个状态发生变化时事件中是拿不到最新的 state你会想到,我把 state 放到依赖项中: {代码...} 这样做又会有新问题:click 事件会重复...
封面图

Promise基础(消化错误和抛出错误)

2022-12-14
阅读 3 分钟
1.5k
在这两个回调中 return xxx ,相当于调用 return new Promise((resolve) => resolve(xxx));

在Canvas中绘制Geojson数据

2022-11-16
阅读 4 分钟
1.7k
需求分析在做地图开发的时候遇到一个需求,是在 canvas 中绘制 Geojson 数据数据格式为 EPSG:4326 的 Polygon:三维数组每一项都是由经纬度组成的第一个点和最后一个点相同,表示 Polygon 是闭合的 {代码...} 需求分析:显示在 canvas 的中间地图 y 轴和屏幕的 y 轴是相反的,绘制出来的 Polygon 不能和实际反过来屏幕的...
封面图

在 OpenLayers 中清除数据

2022-10-31
阅读 1 分钟
1.8k
在 OpenLayers 中,各个概念的顺序是 map -> layer -> source -> feature -> geometry -> coordinates

在 Openlayer 中添加 mark,并添加 hover 效果

2022-10-27
阅读 3 分钟
1.4k
add mark方法一如果有多个点的话,可以生成多个 feature(循环调用 addFeature) {代码...} 方法二用 geojson 去渲染 mark {代码...} geojson 格式生成 geojson 的方式:自己手动构建使用 @turf/helpers,它提供了 point、featureCollection 等方法 {代码...} hover markpopoveroverlay 需要一个 dom 元素,这里是用过 r...

迟迟没学会grid,是因为你没理解flex

2022-10-15
阅读 3 分钟
1.1k
我先问 2 个问题:你是不是用主轴-交叉轴/辅轴/副轴的概念理解 flex你是不是也用这个概念去理解 grid如果你是用这种方式理解的 flex,那听我慢慢道来今天我打破你对 flex 的理解打碎对 flex 理解display: grid 和 display: flex 默认方向都是 row,为什么他们表现出来的形式不一样呢?display: flex: 效果display: grid...

补码加减法运算和溢出判断

2022-08-07
阅读 2 分钟
3.7k
设机器字长为 8 位(包括一位符号位),A = 15,B = -24,C = 124,求 [A+B]补、[A-B]补、[A+C]补、[B-C]补

原码、反码、补码、移码之间的关系

2022-08-06
阅读 2 分钟
3.2k
原码、反码、补码、移码存在于有符号数中,有符号数的最高位是符号位,0 表示正数,1 表示负数,这些码统称为机器数。在计算机中,一个二进制数由符号位和数值位组成,在 8 位计算机中,由于最高位是符号位,数值位最多也就 7 位。ps:下面介绍的各种码,如没有特殊说明,都是 8 位原码原码是计算机用于表示的十进制数的...

计算机是如何实现除法运算的

2022-08-05
阅读 4 分钟
7.8k
二进制除法和十进制除法是一致的,都是采用:将被除数从高位除起,每次计算得到的商保留,余数加下一位数再次进行除法,依次将被除数所有位数运算完毕,得到的商按照按顺序组合,余数为最后一次运算结果。