自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 什么时候要分库分表

在业务开发之前,我们首先要根据自己的业务需求来设计表。考虑到一开始的业务发展比较平缓,且开发周期比较短,因此在开发时间比较紧的情况下,我们尽量不要考虑分表分库。但是我们可以将分表分库的业务接口预留,提前考虑后期分表分库的切分规则,把该冗余的字段提前冗余出来,避免后期分表分库的 JOIN 查询等。当业务发展比较迅速的时候,我们就要评估分表分库的必要性了。一旦需要分表分库,就要结合业务提前规划切分规则,尽量避免消耗性能的跨表跨库 JOIN 查询、分页查询以及跨库事务等操作。

2024-03-14 13:51:38 638

原创 mysql分库分表

分库分表是解决数据过大问题的良方,目的就是为了缓解数据库的压力,最大限度减轻数据库压力,提高数据处理的效率。分库是把一个数据库,按实际场景切分多个库,再将数据表分散到多个库中。分表是把一个数据库中的数据表拆分成多张表,防止单表过大两者都是为了解决数据过大问题,划分方式一般有垂直划分和水平划分两种。这里强烈建议在业务设计之初,就要规划好数据库的设计,做好分库分表,如果等业务量上涨之后再来划分,成本会比较昂贵。分库分表其实是一家,分库只是在分好表的基础上,将表挪移到不同的库,所以我们着重讨论分表。

2024-03-14 12:48:47 549

原创 表结构设计

现在你只需要牢记:分布式数据库架构,仅用 UUID 做主键依然是不够的。PK = 时间字段 + 随机码(可选) + 业务信息1 + 业务信息2 ......总的来说,范式是偏数据库理论范畴的表结构设计准则,在实际的工程实践上没有必要严格遵循三范式要求,每张表一定要有一个主键;自增主键只推荐用在非核心业务表,甚至应避免使用;核心业务表推荐使用 UUID 或业务自定义主键;一份数据应尽可能保留一份,通过主键关联进行查询,避免冗余数据;

2024-03-14 11:19:41 367

原创 mysql读写分离

当然了,面试官除了从架构上考察你对 MySQL 主从复制延迟的理解,还会问你一些扩展问题,比如:当 MySQL 做了主从分离后,对于数据库的使用方式就发生了变化,以前只需要使用一个数据库地址操作数据库,现在却要使用一个主库地址和多个从库地址,并且还要区分写入操作和查询操作,那从工程代码上设计,怎么实现主库和从库的数据访问呢?MySQL 做读写分离的前提,是把 MySQL 集群拆分成“主 + 从”结构的数据集群,这样才能实现程序上的读写分离,并且 MySQL 集群的主库、从库的数据是通过主从复制实现同步的。

2024-03-14 11:17:58 690

原创 GO逃逸分析

因为Go的内存分配策略学习了TCMalloc的线程缓存思想,他为每个处理器分配了一个mcache,注意:从mcache分配内存也是无锁的。因为Go的内存分配策略学习了TCMalloc的线程缓存思想,他为每个处理器分配了一个mcache,注意:从mcache分配内存也是无锁的。逃逸分析就是服务于内存分配的,而内存的释放由GC负责。程序在运行期间可以主动从堆上申请内存,这些内存通过Go的内存分配器分配,并由垃圾收集器回收。原因是:栈内存能更好地利用CPU的缓存策略,因为栈空间相较于堆来说是更连续的。

2024-03-02 19:46:16 1266

原创 GO泛型相关

通过引入 类型形参 和 类型实参 这两个概念,我们让一个函数获得了处理多种不同类型数据的能力,这种编程方式被称为 泛型编程。基本格式:T 就是上面介绍过的类型形参(Type parameter),在定义Slice类型的时候 T 代表的具体类型并不确定,类似一个占位符 int|float32|float64 这部分被称为类型约束(Type constraint),中间的 | 的意思是告诉编译器,类型形参 T 只可以接收 int 或 float32 或 float64 这三种类型的实参 中括号里的 T

2024-03-02 19:27:06 1285

原创 GO——包

提示:go get [包名]@[版本号]命令中版本号可以是 x.y.z 的形式,例如 go get [email protected],也可以是 git 上的分支或 tag,例如 go get foo@master,还可以是 git 提交时的哈希值,例如 go get foo@e3702bed2。Go语言的包借助了目录树的组织形式,一般包的名称就是其源文件所在目录的名称,虽然Go语言没有强制要求包名必须和其所在的目录名同名,但还是建议包名和所在目录同名,这样结构更清晰。

2024-03-02 16:51:26 1077

原创 GO-并发

其一大特点是goroutine的调度是在用户态下完成的, 不涉及内核态与用户态之间的频繁切换,包括内存的分配与释放,都是在用户态维护着一块大的内存池, 不直接调用系统的malloc函数(除非内存池需要改变),成本比调度OS线程低很多。当main()函数返回的时候该goroutine就结束了,所有在main()函数中启动的goroutine会一同结束,main函数所在的goroutine就像是权利的游戏中的夜王,其他的goroutine都是异鬼,夜王一死它转化的那些异鬼也就全部GG了。

2024-03-02 16:50:15 1068

原创 GO-接口

Go语言提倡面向接口编程。每个接口类型由数个方法组成。type 接口类型名 interface{方法名1( 参数列表1 ) 返回值列表1方法名2( 参数列表2 ) 返回值列表2接口类型名:使用 type 将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加 er,如有写操作的接口叫 Writer,有字符串功能的接口叫 Stringer,有关闭功能的接口叫 Closer 等。

2024-03-02 16:48:26 1262

原创 GO结构体

接收器类型可以是(几乎)任何类型,不仅仅是结构体类型,任何类型都可以有方法,甚至可以是函数类型,可以是 int、bool、string 或数组的别名类型,但是接收器不能是一个接口类型,因为接口是一个抽象定义,而方法却是具体实现,如果这样做了就会引发一个编译错误invalid receiver type…在Go语言中有一个概念,它和方法有着同样的名字,并且大体上意思相同,Go 方法是作用在接收器(receiver)上的一个函数,接收器是某种类型的变量,因此方法是一种特殊类型的函数。

2024-03-01 11:09:42 903

原创 GO—函数

Go 语言支持普通函数、匿名函数和闭包,从设计上对函数进行了优化和改进,让函数使用起来更加方便。Go 语言的函数属于“一等公民”(first-class),也就是说:函数定义:func:函数由 func 开始声明 function_name:函数名称,函数名和参数列表一起构成了函数签名。 parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。

2024-03-01 11:08:50 1227

原创 GO常量指针

Go语言中的常量使用关键字const定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。所有常量的运算都可以在编译期完成,这样不仅可以减少运行时的工作,也方便其他代码的编译优化,当操作数是常量时,一些运行时的错误也可以在编译时被发现,例如整数除零、字符串索引越界、任何导致无效浮点数的操作等。

2024-03-01 11:08:08 921 1

原创 GO数组切片

当 map 增长到容量上限的时候,如果再增加新的 key-value,map 的大小会自动加 1,所以出于性能的考虑,对于大的 map 或者会快速扩张的 map,即使只是大概知道容量,也最好先标明。在声明的时候不需要知道 map 的长度,因为 map 是可以动态增长的,未初始化的 map 的值是 nil,使用函数 len() 可以获取 map 中 键值对的数目。这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内(左闭右开的区间)。

2024-03-01 11:01:05 1177

原创 GO流程控制

在编程中,变量的作用范围越小,所造成的问题可能性越小,每一个变量代表一个状态,有状态的地方,状态就会被修改,函数的局部变量只会影响一个函数的执行,但全局变量可能会影响所有代码的执行状态,因此限制变量的作用范围对代码的稳定性有很大的帮助。如果存在第二个分支,则可以在上面代码的基础上添加 else 关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个。结束循环的方法:break,return,goto,panic。

2024-03-01 11:00:18 733 1

原创 GO—变量

Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性。

2024-03-01 10:59:43 776

原创 GO基本类型

Go语言同时提供了有符号和无符号的整数类型。有符号整型范围:-2^(n-1) 到 2^(n-1)-1无符号整型范围: 0 到 2^n-1uint在硬件开发中使用用来表示 Unicode 字符的 rune 类型和 int32 类型是等价的,通常用于表示一个 Unicode 码点。这两个名称可以互换使用。同样,byte 和 uint8 也是等价类型,byte 类型一般用于强调数值是一个原始的数据而不是一个小的整数。无符号的整数类型 uintptr,它没有指定具体的 bit 大小但是足以容纳指针。

2024-03-01 10:58:55 800

原创 【无标题】

问题:如果网络环境发生变化,比如从有线变成无线,或者电脑从办公室移动到家里,主机 IP(网段)发生了变化,需要重新设置虚拟机的静态 IP 吗?如果使用默认的动态分配 IP,虚拟机每次开机以后 IP 都会改变,Xshell 连接需要修改 IP。对于第一次使用 vi 编辑器的同学来说,需要注意,VI 有两种模式,一种是“命令模式”,可以执行命令,一种是“编辑模式”,可以修改文本。IPADDR 就是静态 IP 地址,网段跟物理机的网段一致,比如物理机的 IP 是。

2024-01-16 17:02:01 817

原创 English grammar

about verb

2022-10-22 20:31:04 123 1

原创 cpp基础复习

不能返回局部变量引用当函数调用作为左值式,函数返回必须是引用引用的本质是内部实现了一个指针常量//发现是引用,转换为 int* const ref = &a;void func(int& ref){ ref = 100; // ref是引用,转换为*ref = 100}使用引用的时候,在函数形参中加const,防止形参改变实参,但加了之后就不能做赋值或换值之类的操作了函数中默认参数如果有,那么从第一个默认参数开始从左向右都是默认参数函数重载满足条件:同一个作用域下函

2021-12-02 17:12:19 145

转载 volatile,static,const,extern等关键字

volatile作用Volatile关键词的第一个特性:易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。Volatile关键词的第二个特性:“不可优化”特性。volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中的指令,一定会被执行。 Volatile关键词的第三个特性:”顺序性”,能够保证Volatile变量间的顺序性,编译器不会进行乱序优化。 C/C

2021-11-26 12:12:57 141

原创 0x00D2DCAC 处(位于 Company.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000024 时发生访问冲突。

上面的意思就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量)(1)最简单也最直接的错误可能就是scanf()的问题,我们都知道输入的时候都是scanf("%格式",&变量),那么除了字符串(可要&,可不要)之外,所有的输入都需要&,如果你丢了,在很多编译器上变异的时候是查不出来的,也就是说是没有错的,但是输入数据会差生上述错误,是因为写成scanf("%格式",变量)这种形式了,这样你所输入的变量就不知道会存储到哪里。(2)空指针赋值的问题。我们知道如

2021-11-22 19:36:25 2173

转载 C++中的纯虚函数

原文链接:https://blog.csdn.net/ithomer/article/details/6031329在C++中的一种函数申明被称之为:纯虚函数(pure virtual function).它的申明格式如下:class CShape{public:virtual void Show() =0;};注意红色部分,在普通的虚函数后面加上" =0"这样就声明了一个pure virtual function.在什么情况下使用纯虚函数(pure vitrual function)?1

2021-11-21 19:22:43 188

原创 2、一个temprature.csv文件中存放了形如:36.1,36.8,39.2,41.2,35.2,42.1,37.5,38.3,39.2…这样的用逗号分隔开的人体体温测量数据,请统计高烧 (大于

with open("D:\\1.txt","r",encoding="utf-8") as f: line=f.read().split(',') print(line) ls=[float(i) for i in line] print(ls) a=0 b=0 c=0 for i in ls: if 0<i<36: a+=1 elif 36<=i<38:

2021-11-21 01:47:12 339

原创 sqlyog连接MySQL8.0出现Error No.1251

错误提示:Error No.1251Client does not support authentication protocol requested by server;consider upgrading MySQL client产生原因:主要是由于mysql8以前的加密规则与mysql8以后的存在差异客户端和服务端版本差别太大解决办法:1.首先mysql必须是装好了,启动客户端(任意一个)服务启动成功之后,输入密码,然后回车。2.然后在mysql>后输入(下面三条命令一次输入

2021-11-20 16:01:31 2909 3

原创 python之numpy库的应用

numpy是由c语言编写的,运行速度比python 循环快很多在数据处理的过程中,遇到使用 python for循环实现一些向量化,矩阵化操作的时候,要优先考虑用numpynumpy数组的创建1 从列表开始创建x=np.array([1,1,2,3,4,5])print(x)print(type(x))print(x.shape)[1 1 2 3 4 5]<class 'numpy.ndarray'>(6,)设置数组的数据类型x=np.array([1,1,2,3,4

2021-11-16 15:21:10 1074

原创 python标准库

time库python处理时间的标准库1 获取现在时间time.localtime() 本地时间time.gmtime() utc世界统一时间北京时间比世界统一时间早8小时2 时间戳与计时器time.time() 返回自纪元以来的秒数,记录sleeptime.perf_counter() 随意选取一个时间点,记录现在时间到该时间点的间隔秒数,记录sleeptime.process_time() 随意选取一个时间点,记录现在时间到该时间点的间隔秒数,不记录sleepperf

2021-11-16 11:04:11 685

原创 python 小提高

错综复杂的复制浅拷贝list1=[1,2,3,4]list2=list1 #或者list1[:] list(list1)均可实现浅拷贝list2.append(5)print(list1)print(list2)[1, 2, 3, 4, 5][1, 2, 3, 4, 5]修改一个列表,另外一个列表也会变换列表的底层实现:列表内的元素可以分散的存储在内存中列表存储的,实际上是这些元素的地址------地址的存储在内存中是连续的浅拷贝是将地址复制了一份给别的变量名但是对元组

2021-11-15 20:25:35 318

原创 python 类 文件读写与模块

初始化类的属性def __init__(self,name): #self不能省 self.name=name注意:在定义类方法时,self不能省继承class 子类名(父类名):class electtricCar(Car): def __init__(self,brand,model,year): super().__init__(brand,model,year) #声明继承父类属性 不需要加self了子类自动继承父类的方法重写父类的方法----多态对方法重写时,方法

2021-11-15 18:09:46 639

原创 python函数

抽象成函数def fact(n): res=1 for i in range(1,n+1): res+=i; return resprint(fact(10))56关键字参数–用于参数比较多的情况下def fuct(x,y,z): print(x,y,z)fuct(y=1,x=6,z=9)6 1 9关键字参数可以与位置参数混搭使用,但关键字参数必须在前面默认参数必须放在非默认参数的后面默认参数一定要是不可变的类型(数字,字符串,元

2021-11-15 12:26:24 413

原创 python入门

1.组合数据类型列表list数据有位置顺序列表是一个可以使用多种类型元素,支持元素的增删查改表达方式:[DATA1,DATA2…]以逗号分割访问直接 [数据位置] 进行访问#字符转列表 list("人工智能是未来的趋势") ['人', '工', '智', '能', '是', '未', '来', '的', '趋', '势']#元组转列表 list(("我",'们','都','很像')) ['我', '们', '都', '很像']#集合转列表 l

2021-11-12 13:33:01 789

原创 jupyter notebook常用命令

enter 从命令模式变成编辑模式Esc 从编辑模式退回命令模式shift + enter 运行当前代码块并跳到下一代码块鼠标选中代码块到命令模式,按m进入markdown单元格,y变成代码单元格按b 在上方创建代码块,按a在下方创建选中代码块 按x 剪切 ,shift + v 粘贴在上方按l 标行数按 h 快捷键大全...

2021-11-12 09:11:31 369

原创 贪心算法入门

贪心算法在求解最优化问题时,从初始阶段开始,每一个阶段总是做一个使局部最优的贪心选择,不断将问题化为规模更小的子问题。特就是说,贪心算法并不是从整体最优考虑,他所做出的选择只是在某种意义上的局部最优选择。贪心算法的应用:如哈夫曼树,单源最短路径,构造最小生成树等贪心算法求解步骤初始化:已知问题有n个输入,置问题的解集合j为空;选度量标准:根据题意,选取一种度量标准,按照这种度量标准对n个输入排序考察输入:按序一次输入一个量,看该量能否和j中已选出来的元素(称为该量度意义下的部分最优解)加在一起

2021-11-09 21:28:48 116

原创 leetcode hot 3-4

3.无重复字符的最长字串class Solution {public: int lengthOfLongestSubstring(string s) { unordered_set<char>occ;//哈希集合,记录每个字符是否出现过 //右指针,初始指向左边界左侧 int rk=-1,ans=0; //枚举左指针的位置 for(int i=0;i<s.size();i++) {

2021-11-09 20:48:12 61

原创 简单的dp入门

动态规划题的特点计数有多少种方式走到右下角有多少种方式选出k个数使得和是sum求最大最小值从左上角走到右下角路径的最大数字和最长上升子序列长度求存在性取石子游戏,先手是否必胜能不能选出k个数使得和是sum动态规划组成部分一:确定状态状态在动态规划中的作用属于定海神针简单的说,解动态规划的时候需要开一个数组,数组的每个元素f[i],或f[i] [j]代表什么?类似于解数学题中,x,y,z代表什么确定状态需要两个意识:1.最后一步2.子问题动态规划组成二:转移方

2021-11-09 20:45:41 54

原创 leetcode hot 1-2

1.两数之和解法1:暴力遍历class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { for(int i=0;i<nums.size();i++) { for(int j=i+1;j<nums.size();j++) { if(nums[i]+nu

2021-11-06 11:45:32 47

原创 #六级阅读

同转:同根词,词词,短语概念,宽泛到具体关键词的选取有专有先挑专有信息定位 (时间 地点 人物 大写 标点)没有专有条名词(不可以是文章背景信息,避免大标题出现的词语,题目中反复出现的词语)实在没有名词再考虑形容词和动词的组合匹配题浏览题干选取定位词易定位题目和能够暗示段落的题目优先做 (段落结构: 古老—>进)剩下题目优先查找出题段落若该段包含题目中两个及以上原词或同转,则该段为答案注意:若两个题目定位在同一段落,可以额外划另外一个定位词验证,注意段落可能被

2021-11-05 20:29:13 78

原创 map/multimap容器

简介:map中所有元素都是pairpair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)所有元素都会根据元素的键值自动排序本质:map/multimap属于关联式容器,底层结构是用二叉树实现。优点:可以根据key值快速找到value值map和multimap区别:map不允许容器中有重复key值元素multimap允许容器中有重复key值元素map构造和赋值函数原型:构造:map<T1, T2> mp;

2021-11-05 18:48:09 72

原创 set/multiset容器

所有元素都会在插入时自动被排序本质:set/multiset属于关联式容器,底层结构是用二叉树实现set和multiset区别:set不允许容器中有重复的元素multiset允许容器中有重复的元素构造:set<T>st;set(const set& st);赋值:set& operator=(cosnt set& st);void print(set<int>&s){ for(set<int>::itera

2021-11-05 15:33:37 63

原创 list(链表)容器

即链表将数据进行链式存储stl中的链表是一个双向循环链表由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器list的优点:采用动态存储分配,不会造成内存浪费和溢出链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素list的缺点:链表灵活,但是空间(指针域) 和 时间(遍历)额外耗费较大List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。list构造函数函数原型

2021-11-05 13:58:32 181

原创 stack和queue容器

stack容器stack是一种先进后出的数据结构,它只有一个出口栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为栈可以判断是否为空 empty()栈可以返回元素个数 size()入栈 push()出栈 pop()stack常用接口构造函数:stack<T> stk; //stack采用模板类实现, stack对象的默认构造形式stack(const stack &stk);

2021-11-04 20:28:53 69

空空如也

空空如也

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

TA关注的人

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