首页
Uphie's Blog
取消

Go 中 new 和 make 的区别

Go 中 new 和 make 都是创建对象的一种方式,但它们有一些区别。 new 我们先来看官方权威的解释: // Go 1.19.3 // src/builtin/builtin.go // The new built-in function allocates memory. The first argument is a type, // not a value, and th...

Go深拷贝

在 Python 中,对对象的拷贝有 copy.copy() 和 copy.deepcopy(),前者是浅拷贝,后者是深拷贝。如果想让拷贝出来的新对象与旧对象彻底没有关系我们就要使用深拷贝,深拷贝的对象的每个元素,每个 field 的内存地址都与原对象不同,但值相同。 在 Go 中没有提供深拷贝的原生调用,需要用的话需要自己来实现。 json序列化、反序列化 我们可以使用 json 序...

Go 的 slice 扩容机制

如题,这是个老生常谈的问题了,但作为一个经典 Go 面试八股文题目,它很尴尬,因为它变化很频繁,不同 Go 版本的 slice 扩容机制可能不同。网络上的资料五花八门,很多已经过时了,但当面试官拿着过时的标准答案来比对你的回答时,就很无奈了。 笔者拿现在(截止文章发布日期)最新版本 Go1.19.3 进行讨论。 标准答案必须从源码中获得,slice 扩容的核心函数是 growslice:...

MySQL 执行计划中的 extra 详解

上篇文章介绍了 MySQL 执行计划中的 type,这篇文章介绍执行计划中的 Extra,并且沿用上篇文章中的数据库表,不过做了些改动,仍然使用 MySQL8.0.21 讲解。 CREATE TABLE `sku` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 COLLAT...

MySQL 执行计划中的 type 详解

在开发过程中,我们尝尝使用 explain 来查看 sql 语句的性能情况,如: mysql> explain select * from test where f1=2; +----+-------------+-------+------------+------+---------------+-----------+---------+-------+------+------...

Linux xargs 命令

xargs 命令可以读取标准输入和管道中的数据,默认以空格、Tab、回车作为分隔符和结束符。 xargs 命令后面的默认命令是 echo。 我们先简要看下用法: [root@centos uphie]# xargs --help Usage: xargs [OPTION]... COMMAND INITIAL-ARGS... Run COMMAND with arguments INIT...

Linux export 命令

export 命令用于设置或显示环境变量。设置效力仅限于此次登录。 语法: export [-fnp][变量名]=[变量值] 定义环境变量 只声明环境变量: [root@centos uphie]# export MYENV1 [root@centos uphie]# export -p | grep MYENV declare -x MYENV1 声明环境变量并赋值: [roo...

Ubuntu安装k8s

设置路由规则 (master节点) master节点开放6443、2379、2380、10250 端口。 # iptables -A INPUT -p tcp -m multiport --dports 6443,2379,2380,10250 -j ACCEPT 加载内核模块 (所有节点) 本文后面要使用 flannel 插件,因此依赖 br_netfilter 内核模块 添...

Ubuntu安装docker

此文以 Ubuntu Server为例记录安装 docker步骤。 设置软件仓库 1.1 卸载旧版本 docker(如果有的话) # apt-get remove docker docker-engine docker.io containerd runc 1.2 安装必要的软件 # apt-get update && apt-get install ca-c...

docker容器中的PID

如果有意观察的话,会发现 docker容器内初始进程的进程号 PID 很小,似乎就是一个独立的机器,是如何实现的呢? 以 mysql8 容器为例,我们先在容器中先安装下 ps 命令: $ docker exec -it mysql8.0.21 bash root@8b28ee20e307:/# apt update root@8b28ee20e307:/# apt install proc...