- 博客(127)
- 资源 (13)
- 收藏
- 关注
原创 12 | 指针详解:在什么情况下应该使用指针?
12 | 指针详解:在什么情况下应该使用指针?什么是指针我们都知道程序运行时的数据是存放在内存中的,而内存会被抽象为一系列具有连续编号的存储空间,那么每一个存储在内存中的数据都会有一个编号,这个编号就是内存地址。有了这个内存地址就可以找到这个内存中存储的数据,而内存地址可以被赋值给一个指针。小提示:内存地址通常为 16 进制的数字表示,比如 0x45b876。可以总结为:在编程语言中,指针是一种数据类型,用来存储一个内存地址,该地址指向存储在该内存中的对象。这个对象可以是字符串、整数、函数或者你
2022-08-30 15:14:14
2087
原创 深入理解Golang Map原理
哈希表 是一种古老的数据结构,在 1953 年就有人使用拉链法实现了哈希表,它能够根据键(Key)直接访问内存中的存储位置,也就是说我们能够直接通过键找到该键对应的一个值,哈希表名称的来源是因为它使用了哈希函数将一个键映射到一个桶中,这个桶中就可能包含该键对应的值。哈希函数(常被称为散列函数)是可以用于将任意大小的数据映射到固定大小值的函数,常见的包括MD5、SHA系列等。一个设计优秀的哈希函数应该包含以下特性:哈希函数在实际中遇到的最常见的问题就是哈希碰撞, 即不同的键通过哈希函数可能产生相同的哈希值
2022-06-11 19:54:01
2063
3
原创 11 | 并发模式:Go 语言中即学即用的高效并发模式
11 | 并发模式:Go 语言中即学即用的高效并发模式如何通过 Context 实现日志跟踪?要想跟踪一个用户的请求,必须有一个唯一的 ID 来标识这次请求调用了哪些函数、执行了哪些代码,然后通过这个唯一的 ID 把日志信息串联起来。这样就形成了一个日志轨迹,也就实现了用户的跟踪,于是思路就有了。在用户请求的入口点生成 TraceID。通过 context.WithValue 保存 TraceID。然后这个保存着 TraceID 的 Context 就可以作为参数在各个协程或者函数间传
2021-03-21 21:02:43
348
原创 09 | 同步原语:sync 包让你对并发控制得心应手
09 | 同步原语:sync 包让你对并发控制得心应手在 Go 语言中,不仅有 channel 这类比较易用且高级的同步机制,还有 sync.Mutex、sync.WaitGroup 等比较原始的同步机制。通过它们,我们可以更加灵活地控制数据的同步和多协程的并发,下面我为你逐一讲解。资源竞争在一个 goroutine 中,如果分配的内存没有被其他 goroutine 访问,只在该 goroutine 中被使用,那么不存在资源竞争的问题。但如果同一块内存被多个 goroutine 同时访问,就会产生不
2021-03-21 19:45:00
261
原创 08 | 并发基础:Goroutines 和 Channels 的声明与使用
08 | 并发基础:Goroutines 和 Channels 的声明与使用什么是并发前面的文章中,写的代码都按照顺序执行,也就是上一句代码执行完,才会执行下一句,这样的代码逻辑简单,也符合我们的阅读习惯。但这样是不够的,因为计算机很强大,如果只让它干完一件事情再干另外一件事情就太浪费了。比如一款音乐软件,使用它听音乐的时候还想让它下载歌曲,同一时刻做了两件事,在编程中,这就是并发,并发可以让你编写的程序在同一时刻做多几件事情。进程和线程讲并发就绕不开线程,不过在介绍线程之前,我先为你介绍什么是进
2021-03-21 19:31:27
228
原创 07 | 错误处理:如何通过 error、deferred、panic 等处理错误?
07 | 错误处理:如何通过 error、deferred、panic 等处理错误?错误在 Go 语言中,错误是可以预期的,并且不是非常严重,不会影响程序的运行。对于这类问题,可以用返回错误给调用者的方法,让调用者自己决定如何处理。error 接口在 Go 语言中,错误是通过内置的 error 接口表示的。它非常简单,只有一个 Error 方法用来返回具体的错误信息,如下面的代码所示:type error interface { Error() string}在下面的代码中,我演示了一
2021-03-21 19:15:06
318
原创 06 | struct 和 interface:结构体与接口都实现了哪些功能?
06 | struct 和 interface:结构体与接口都实现了哪些功能?结构体结构体定义结构体是一种聚合类型,里面可以包含任意类型的值,这些值就是我们定义的结构体的成员,也称为字段。在 Go 语言中,要自定义一个结构体,需要使用 type+struct 关键字组合。在下面的例子中,我自定义了一个结构体类型,名称为 person,表示一个人。这个 person 结构体有两个字段:name 代表这个人的名字,age 代表这个人的年龄。type person struct { name s
2021-03-21 18:51:49
335
原创 05 | 函数和方法:Go 语言中的函数和方法到底有什么不同?
05 | 函数和方法:Go 语言中的函数和方法到底有什么不同?函数和方法是我们迈向代码复用、多人协作开发的第一步。通过函数,可以把开发任务分解成一个个小的单元,这些小单元可以被其他单元复用,进而提高开发效率、降低代码重合度。再加上现成的函数已经被充分测试和使用过,所以其他函数在使用这个函数时也更安全,比你自己重新写一个相似功能的函数 Bug 率更低。这里详细讲解 Go 语言的函数和方法,了解它们的声明、使用和不同。虽然在 Go 语言中有函数和方法两种概念,但它们的相似度非常高,只是所属的对象不同。我们先
2021-03-21 18:30:17
270
原创 04 | 集合类型:如何正确使用 array、slice 和 map?
04 | 集合类型:如何正确使用 array、slice 和 map?在实际需求中,我们会有很多同一类型的元素放在一起的场景,这就是集合,例如 100 个数字,10 个字符串等。在 Go 语言中,数组(array)、切片(slice)、映射(map)这些都是集合类型,用于存放同一类元素。Array(数组)数组存放的是固定长度、相同类型的数据,而且这些存放的元素是连续的。所存放的数据类型没有限制,可以是整型、字符串甚至自定义。数组声明要声明一个数组非常简单,语法和第二课时介绍的声明基础类型是一样的。
2021-03-21 18:19:14
179
原创 03 | 控制结构:if、for、switch 逻辑语句的那些事儿
03 | 控制结构:if、for、switch 逻辑语句的那些事儿在上节课中我留了一个思考题,在一个字符串中查找另外一个字符串是否存在,这个其实是字符串查找的功能,假如我需要在“飞雪无情”这个字符串中查找“飞雪”,可以这么做:i:=strings.Index("飞雪无情","飞雪")这就是 Go 语言标准库为我们提供的常用函数,以供我们使用,减少开发。Go 语言代码逻辑的控制。流程控制语句用于控制程序的执行顺序,这样你的程序就具备了逻辑结构。一般流程控制语句需要和各种条件结合使用,比如用于条件判
2021-03-21 17:59:00
185
原创 02 | 数据类型:你必须掌握的数据类型有哪些?
02 | 数据类型:你必须掌握的数据类型有哪些?上一章的思考题是打印出自己的名字,这个作业比较简单,属于文本的替换,你只需要把我示例中的"Hello 世界"修改成自己的名字即可,比如以我的名字为例,替换为“飞雪无情”。经过上一章的学习,你已经对 Go 语言的程序结构有了初步了解,也准备好了相应的开发环境。但是一个完整的项目需要更复杂的逻辑,不是简单的“Hello 世界”可相比的。这些逻辑通过变量、常量、类型、函数方法、接口、结构体组成,这节课我就将带你认识它们,让你的 Go 语言程序变得更加生动。变量
2021-03-21 17:50:49
346
原创 01 | 基础入门:编写你的第一个 Go 语言程序
01 | 基础入门:编写你的第一个 Go 语言程序从这里开始,我会带你走进 Go 语言的世界。我会用通俗易懂的语言,介绍 Go 语言的各个知识点,让你可以从零开始逐步学习,再深入它的世界。现在,让我以一个经典的例子“Hello World”来带你入门 Go 语言,了解它是如何运行起来的。Hello, 世界如果你学过 C 语言,对这个经典的例子应该不会陌生。通过它,我先带你大概了解一下 Go 语言的一些核心理念,让你对 Go 语言代码有个整体的印象。如下所示:ch01/main.gopackage
2021-03-21 17:14:25
181
原创 Go mod常用与高级操作
1. 开启Go module1.11和1.12版本将下面两个设置添加到系统的环境变量中GO111MODULE=onGOPROXY=https://goproxy.io1.13版本之后这种方式并不会覆盖之前的配置,需要先把系统的环境变量里面的给删掉再设置go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct2. go get使用使用go module之后,go get
2020-05-31 14:34:52
613
原创 MySQL 优化
关系数据库作为生产环境中的OLTP,承载着重要的使命,说它是整个业务系统的最重要的部分都不为过。由于MySQL的性能问题是一个全方位立体的问题,上到整个业务系统的架构,读写节点的拓扑,节流策略的设置,业务侧分库分表,下到表的关系建立,表结构设计,SQL语句优化,MySQL服务器的参数调优,实时的监控MySQL的指标并反馈等等。我们只有确定了问题很可能出在哪里,然后采取对应的措施才可能解决。但是一...
2020-04-11 15:03:24
346
原创 苹果AppId登录注册
苹果授权登陆方式PC/M端授权登陆,采用协议类似于oauth2协议App端授权登陆,提供两种后端验证方式开发者后台配置详细配置参考该文档,手把手教学https://developer.okta.com/blog/2019/06/04/what-the-heck-is-sign-in-with-apple1、 PC/M接入方式https://appleid.apple.com/a...
2020-01-15 14:04:48
5750
原创 算法--罗马数字转整数
算法–罗马数字转整数题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。| 字符 | 数值 || I | 1 || V | 5 || X | 10 || L | 50 || C | 100 || D ...
2019-12-01 16:02:20
205
原创 算法--整数转罗马数字
算法–整数转罗马数字题目:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 ...
2019-10-05 18:19:28
289
原创 算法--盛最多水的容器
算法–盛最多水的容器题目:给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况...
2019-10-04 16:46:35
336
原创 算法--正则表达式匹配
算法–正则表达式匹配题目给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:...
2019-08-17 22:58:50
357
转载 python redis之连接池的原理
什么是连接池通常情况下, 当我们需要做redis操作时, 会创建一个连接, 并基于这个连接进行redis操作, 操作完成后, 释放连接,一般情况下, 这是没问题的, 但当并发量比较高的时候, 频繁的连接创建和释放对性能会有较高的影响于是, 连接池就发挥作用了连接池的原理是, 通过预先创建多个连接, 当进行redis操作时, 直接获取已经创建的连接进行操作, 而且操作完成后, 不会释放, 用...
2019-08-12 11:23:24
821
原创 算法--回文数
算法–回文数题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个...
2019-08-11 21:25:27
414
原创 算法--字符串转换整数 (atoi)
算法–字符串转换整数 (atoi)题目:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分...
2019-08-11 20:10:10
182
原创 算法--整数反转
算法–整数反转题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...
2019-08-08 23:32:45
211
原创 算法--Z 字形变换
Z 字形变换题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定...
2019-08-08 01:20:00
237
原创 算法--最长回文子串
最长回文子串题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解题:方法一:暴力破解,时间复杂度O(n^3), 不再赘述方法二:中心扩展算法我们观察回文中心的两侧互为镜像。因此,回文可以从它的中...
2019-08-07 23:29:37
162
原创 算法--无重复字符的最长子串
算法–无重复字符的最长子串题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无...
2019-07-28 22:56:44
223
原创 算法-- 两数相加
算法-- 两数相加题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 ...
2019-07-28 21:05:55
431
原创 算法--两数之和
算法–两数之和题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...
2019-07-28 13:36:56
185
转载 MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化—方法1: 直接使用数据库提供的SQL语句—语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N—适应场景: 适用于数据量较少的情况(元组百/千级)—原因/缺点: 全表扫描,速度会很慢 且 有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从结果集的M位置处取出...
2019-03-04 12:02:33
259
转载 Linux系统调用——进程间通信
进程间通信概述进程间通信(InterProcess Communication,IPC)是指在不同进程之间传播或交换信息。Linux的进程间通信方法有管道(Pipe)和有名管道(FIFO)、信号(Signal)、消息队列(Message Queue)、共享内存(Shared Memory)、信号量(Semaphore)、套接字(Socket)等。Linux进程间通信由以下几部分发展而来:1...
2019-02-14 13:20:50
914
转载 MySQL中的读锁和写锁
在数据库的锁机制中介绍过,数据的锁主要用来保证数据的一致性的,数据库的锁从锁定的粒度上可以分为表级锁、行级锁和页级锁。在我的博客中重点介绍过MySQL数据库的行级锁。这篇文章主要来介绍一下MySQL数据库中的表级锁。本文提到的读锁和写锁都是MySQL数据库的MyISAM引擎支持的表锁的。而对于行级锁的共享读锁和互斥写锁请阅读MySQL中的共享锁与排他锁。我习惯在描述表锁的时候按照读写来区分,在表...
2018-11-08 11:47:55
1049
原创 gzip压缩文件传输数据
http协议如何支持压缩文件的传输1、浏览器请求数据时,通过Accept-Encoding说明自己可以接受的压缩方法2、服务端接收到请求后,选取Accept-Encoding中的一种对响应数据进行压缩3、服务端返回响应数据时,在Content-Encoding字段中说明数据的压缩方式4、浏览器接收到响应数据后根据Content-Encoding对结果进行解压注:如果服务器没有对...
2018-09-14 11:33:54
1815
转载 python 关于为datatime 对象添加时区信息以及时区转换问题
此例仅供参考:from pytz import utc from pytz import timezone from datetime import datetime cst_tz = timezone('Asia/Shanghai') utc_tz = timezone('UTC') now = datetime.now().replace(tzinfo=cst_tz...
2018-05-07 15:11:00
22485
转载 以2、3、4、5开头的服务器响应状态码
201-206都表示请求成功200-成功 201-已创建 202-已接受:服务器接受了请求,但未处理 203-非授权信息 204-无内容 205-重置内容 206-部分内容300-307表示要完成请求,需要进一步操作,代码状态通常为重定向400-417表示请求可能出错了,妨碍服务器处理400-服务器不理解的请求语法 401-身份验证错误 403-服务器拒绝请求 404-未找到网页(
2018-02-27 16:43:13
8494
原创 python中encode和decode解释
字符串编码常用类型:utf-8,gb2312,cp936,gbk等。python中,我们使用decode()和encode()来进行解码和编码在python中,使用unicode类型作为编码的基础类型。即 decode encodestr ---------> unicode --------->stru = u'中文' #
2018-01-08 23:54:12
1312
原创 python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别
1.安装Pillowpip install Pillow2.安装tesseract-ocrgithub地址: https://github.com/tesseract-ocr/tesseractwindows:The latest installer can be downloaded here: tesseract-ocr-setup-3.05.01.
2018-01-04 14:03:12
17309
原创 jsp九大内置对象
九大内置对象介绍① out - javax.servlet.jsp.jspWriter out对象用于把结果输出到网页上。方法:1. void clear() ; 清除输出缓冲区的内容,但是不输出到客户端。2. void clearBuffer() ; 清除输出缓冲区的内容,并输出到客户端。3. void close() ;
2018-01-02 22:55:49
284
转载 字符串哈希函数
基本概念所谓完美哈希函数,就是指没有冲突的哈希函数,即对任意的 key1 != key2 有h(key1) != h(key2)。 设定义域为X,值域为Y, n=|X|,m=|Y|,那么肯定有m>=n,如果对于不同的key1,key2属于X,有h(key1)!=h(key2),那么称h为完美哈希函数,当m=n时,h称为最小完美哈希函数(这个时候就是一一映射了)。 在处理大规模字符串数据时,经常要
2017-12-25 15:14:06
371
原创 Python中正则表达式的使用
1.python中正则表达式的规则:2.正则表达式相关注解(1)数量词的贪婪模式与非贪婪模式正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字 符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪
2017-12-22 12:39:29
723
转载 selenium+python+API
分类方法方法描述客户端操作__init__(self, host, port, browserStartCommand, browserURL)构造函数。host:selenium server的ip;port:elenium server的port,默认为4444;browserStartCommand:浏览
2017-11-22 22:32:24
403
OpenGL超级宝典(中文版).pdf
2016-09-26
Android高手进阶教程
2016-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人