自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

opi

不积跬步,无以至千里。不积小流,无以成江海。《荀子》

  • 博客(165)
  • 资源 (8)
  • 收藏
  • 关注

原创 docker php-apache+mysq镜像发布

想要将开发中的php环境快速部署,所以想要打个镜像文件准备新建文件夹,如docker-php,讲php项目拷贝到该路径下,并新建Dockerfile,编辑如下:FROM php:7.4-apacheRUN docker-php-ext-install pdo_mysqlRUN docker-php-ext-install mysqli COPY src/ /var/www/html/EXPOSE 80基于docker库的php:7.4-apache镜像,并使用RUN安装my

2022-04-08 14:43:25 2566

原创 【go】json编解码

1.json包接口func Marshal(v interface{}) ([]byte, error) // 编码func Unmarshal(data []byte, v interface{}) error // 解码1.1 对应关系 Json Go 解释 对象 结构体struct {} => struct 数组 ...

2020-10-09 19:55:11 624

原创 【python】半佛老师的表情包是怎么爬的?

背景听半佛老师说他的表情包是爬的,有点好奇是怎么爬的?由此有了这篇文章。我调研了几个表情包的网站,最后以斗图网为例https://www.doutula.com/photo/list/爬取网站上的表情图片。为了简单,用python +Scrapy去做。环境Python3 +Scrapy(1.6.0)+ urllib +BeautifulSoup如果没有Scrapy包,pip3 install Scrapy即可。参考:https://docs.scrapy.org/en/lat..

2020-07-12 18:00:52 2902

原创 【hive】join语句优化

Mapjoin场景Mapjoin是Hive鲜为人知的功能,它允许将表加载到内存中,从而只要在mapper中完全执行(非常快速)的join,而不必使用“map/reduce”步骤。如果您的查询经常依赖于小表联接(例如城市或国家等),则可能会发现使用mapjoins可以大大提高速度。启用有两种方法可以启用它。1.是通过使用一个注释,/ * + MAPJOIN(小表)* /。此C样式注释应放在SELECT之后,它指示Hive将别名(小表)加载到内存中。SELECT /*+ MAPJOIN

2020-07-01 16:59:26 284

原创 【搜索】ElasticSearch

引言ElasticSearch是一个开源的全文搜索引擎,是一个面向文档的数据库,它像mogodb一样将数据按照json格式存储,然后你就可以通过查询获取他们了。入门使用安装参考,启动服务后一般监听9200端口,一般IDE可装插件ElasticSearch,连接本机后可以使用Rest API进行交互。操作api操作 作用 类比数据库 PUT school 创建索引school 创建数据库school Put Mapping .

2020-06-28 22:06:41 308

原创 【big data】hadoop-yarn-spark

Hadoop看下图,传统的操作系统主要是文件系统和处理器,迁移到集群模式对应Hadoop的HDFS和YARN(Yet Another Resource Negotiator),Yarn负责执行,调度,决定可以做什么以及在哪里进行。YarnYARN(Yet Another Resource Negotiator)是个集群管理器,负责整个集群资源的调度和任务的执行。组件 功能 RM ResourceManager 资源管理器 一个集群一个,

2020-06-28 12:02:50 372

原创 【go】context上下文

Why很多rpc框架中接口函数第一个参数统一是​ctx context.Context​接口,为什么要这么设计?因为一般一个网络请求Request,会在多个Goroutine中处理,而这些Goroutine可能需要共享Request的一些信息;同时当Request被取消或者超时的时候,所有从这个Request创建的所有Goroutine也应该被结束。上下文则几乎已经成为传递与请求同生存周期变量的标准方法。What​context​用于Goroutine之间共享状态变量,另一个gorutine

2020-06-23 16:32:16 375

原创 【微服务】容器化之Docker & Kubernetes

1.容器生态容器技术的生态系统自下而上分别覆盖了IaaS层和PaaS层所涉及的各类问题,包括资源调度、编排、部署、监控、配置管理、存储网络管理、安全、容器化应用支撑平台等。如下图,其中docker、k8s、consul、etcd等都是此处需要关注的。docker主要是轻量级容器引擎,起到容器(运行着服务)间隔离的作用,可以充分利用机器资源,自动化部署。Kubernetes(k8s)主要用于管理容器集群,1.1优势持续部署与测试 跨云平台支持 环境标准化和版本控制2.Docker

2020-06-16 18:34:51 644

原创 【工具】正则表达式

1.背景开发过程中总是经常性地需要处理文本,如一些文本替换、清除等等,手工或者严格匹配效率低下,通过正则匹配的方式可以迅速批量通用化地处理,提高效率。2.正则表达式如下图,服务端的正则有这些特殊字符,2.1 工具https://regexr.com/56ec5网站可以辅助我们编写正则表达式,如下图,右上角可以选择PCRE或者JS的正则模式,两者有所区别,PCRE一般是Scala、Java的正则。第一栏是正则表达式、第二栏是文本,看看是否能够匹配,下图中text中浅蓝色的就是.

2020-06-11 10:30:10 243

原创 【go】常用工具包&框架

1.数据库dao几乎所有的系统都需要数据库操作,在Java中数据库操作的类库和框架包含驱动包driver、连接池包如druid、ORM框架如Mybatis,那go里对标的有哪些呢?Java go包 功能 java.sql.* database/sql 内置 标准接口Driver 具体功能委托各个驱动实现 mysql-connector-java github.com/go-sql-driver/mysql 各个数据库驱动.

2020-05-28 14:14:33 957

原创 【go】反射机制reflect

前言反射机制是运行时更新变量和检查它们的值、调用它们的方法和它们支持的内在操作,而不需要在编译时就知道这些变量的具体类型。跟Java一样,go也提供了反射功能。其实之前就已经用过反射机制,如下语句输出变量的动态类型,底层就是用的reflect包实现的。fmt.Printf("%T\n", i)所有变量都可以由interface{}变量引用,很多函数或方法参数就是interface{},在函数内部通常需要获取interface{} x接口值的类型,通过判断其类型执行不同的处理逻辑。go接口文

2020-05-27 16:20:25 402

原创 【go】测试go test

前言很多语言都有测试工具,如Java的JUnit测试框架的自动化测试,也就是写一些小的程序用来检测产品代码的行为和预期一致,设计执行某些特定的功能case或者是通过随机输入验证边界。Go的测试技术相对低级,依赖go test命令和一系列测试函数规范(convention)。这种相对轻量级的机制高效,且易扩展到基准测试和示例文档。1.go test每个包都可以有其测试代码,go test命令会遍历所有的*_test.go文件中符合上述命名规则的函数,生成一个临时的main包用于调用相应的测试函

2020-05-26 20:14:40 1057 1

原创 【go】gopl学习笔记(7.包管理)

前言Go语言有超过100个的标准包,可以通过以下命令获取标准包go list std 也可以通过http://godoc.org检索包。模块化设计成每个包可以被其它的不同项目共享和重用,在项目范围内统一的分发和复用。每个包一般都定义了一个不同的名字空间,防止命名冲突。还通过控制包内名字的可见性和是否导出来实现封装性,还可以强制用户通过某些特定函数来访问和更新内部变量,这样可以保证内部变量的一致性和并发时的互斥约束。当我们修改了一个源文件,我们必须重新编译该源文件对应的包和所有依赖该包的

2020-05-25 20:58:13 333

原创 【go】gopl学习笔记(6.基于共享变量的并发)

前言并发:在有多个goroutine的程序中,每一个goroutine内的语句也是按照既定的顺序去执行的,但是一般情况下我们没法去知道分别位于两个goroutine的事件x和y的执行顺序。当我们不能确认一个事件x是在另一个事件y的前或者后发生的话,就说明x和y这两个事件是并发的。并发安全:一个函数在线性程序中可以正确地工作,如果在并发的情况下,依然可以正确地工作的话,那么我们就说这个函数是并发安全的,并发安全的函数不需要额外的同步工作。对于某个类型来说,如果其所有可访问的方法和操作都是并发安全的话,

2020-05-25 20:07:11 335

原创 【go】gopl学习笔记(5.goroutine & channel)

前言应用程序通常需要图形化界面异步执行一部分代码,以提升交互体验 需要并发地执行以提升效率 服务端并发处理连接,提升响应速度和qps这些功能都是通过并发实现地,在Go语言中,每一个并发的执行单元叫作一个goroutine,可以暂时理解为Java地线程Thread。语法非常简单,就是在调用需要异步执行的方法前加上go关键字:f() // call f(); 同步调用,等待返回go f() // 创建 goroutine调用f(); 不等待结果,当前goroutine继续执行下面地代

2020-05-25 16:03:13 375

原创 【go】gopl学习笔记(4.接口)

前言我们都知道OOP有两个方式,组合和继承来组织类,分别表示has-a关系和is-a关系,能够实现代码复用、提升扩展性和灵活性。前面一篇讲方法method阐述了go通过结构体struct嵌套实现对象的扩展(相对于Java类的组合,has a关系),outer结构体会自动生成包装方法委托给inner嵌套结构的方法,这样实现了方法代码的复用。这样有了组合has-a关系,go里面的is-a关系是怎么实现的呢?下面我们来看看接口interface~1.接口-合约类似于Java中的接口,接口是一系列通

2020-05-20 18:17:03 388

原创 【go】gopl学习笔记(3.方法method)

前言从之前的特性看下来,很难相信go竟然也是一个面向对象的语言,本篇来see see它的OOP特性,封装和组合体现在哪里~1.方法声明OOP的对象通常包含数据和行为,type定义的类型可以包含数据,其行为怎么表示呢?go是通过方法实现的。go中的method方法与function函数非常类似,区别在于在函数名之前,方法携带了额外的参数(通常是所属类型type e.g. Point),这个参数将这个方法归属于这个参数的类型(表示是这个类型)。如下例,同样的距离方法,函数实现是两个点都在参数列表

2020-05-18 21:13:30 340

原创 【linux】进阶常用命令

磁盘管理经常遇到开发机器磁盘空间满了,需要清理,通常通过以下命令定位大文件进行清理。命令 结果 功能 du -h -d 1|grep G disk usage 查看目录所占磁盘大小 常用于定位占磁盘最多的文件 df -h disk file system 查看磁盘使用情况 ll -h 文件占磁盘大小 字符集查看及修改开发生活中经常有代码迁移到另一台机器执.

2020-05-18 11:36:20 199

原创 【go】gopl学习笔记(2.函数)

1.函数如下函数使用func标识,包含函数签名和函数体。func name(parameter-list) (result-list) {body}func hypot(x, y float64) float64 {return math.Sqrt(x*x + y*y)}1.1 函数声明函数包含签名和函数体,函数体很好理解,就是语句的集合签名包含func、函数名、参数列表、返回值,与其它语言类似,比较明显的区别有两个参数列表的参数名、参数类型的声明顺序,且相同类型可以简写

2020-05-17 14:42:36 542

原创 【go】gopl学习笔记(1.语言基础)

为了加快阅读gopl(The Go Programming Language)书效率,决定输出笔记以督促自己,的疑问与解答ch2 程序结构2.7 scopescope作用域 分了

2020-05-15 19:44:53 1288

原创 【Go】从Java到Go快速入门

目录1. 变量1.1 短变量声明1.2 零值2.函数2.1 返回值2.1.1 多个返回值2.1.2 命名返回值3.结构体3.1 类型判断3.2 方法3.2.1指针接收者4. 接口4.1 隐式实现接口4.2 空接口觉得与Go最像的是C,有结构体,没有类1. 变量1.1 短变量声明var i, j int = 1, 2 k...

2020-04-21 19:08:28 753

原创 【数据库】那些数据库的容量、吞吐和耗时

数据库在mysql中,库 表(一个库DB) 列(一张表) 行 20亿个表 1024列 所有变长字段的长度和 不超过 每行的最大长度为8092字节? 所有变长字段定义长度和 不超过65535字节 单表行数超过500万行或者单表容量超过2GB 每个数据库DB最多可...

2020-04-21 16:42:06 4112

原创 【TCP】从开撩到分手:3次握手与4次挥手

1.三次握手3次握手:客户端SYN,服务端ACK-SYN,客户端ACK客户端状态:CLOSED->SYN-SENT->ESTABLISHED服务端状态:LISTEN->SYN-RCVD->ESTABLISHED2.四次挥手断开连接,可以由客户端发起,也可以由服务断发起,当服务端主动断开连接时,一般客户端继续发送报文会收到Connectionrese...

2020-04-17 15:31:04 207

原创 【分布式】分布式ID生成-基于数据库方案设计

目录1. 需求2.方案设计2.1基于数据库2.1.1 方案设计2.1.2 缺陷:2.1.3 优化方案2.1.3的缺陷:2.1.4 优化方案21. 需求全局唯一,绝对不会出现重复的ID,且ID整体趋势递增。 高可用,服务完全基于分布式架构,即使MySQL宕机,也能容忍一段时间的数据库不可用。 高并发低延时,远程调用QPS可达5W+,TP99在1ms内。...

2020-04-17 14:12:17 994

原创 【算法设计】限流算法

目录1.现有算法1.2 维度设计2.分布式2.1 redis共享存储2.1.1 缺点:2.1.2 优化方案:2.2 每台机器单独限流 totalth/machineCount2.2.1 缺点:2.2.2 优化方案:1.现有算法 计数器 桶 计数器 滑动窗口 漏...

2020-04-16 15:16:58 314

转载 【HTTPS】交换密钥

目录1.原始非对称加密传递2.专用密钥交换算法1.原始非对称加密传递客户端给服务端发送请求; 服务端返回客户端自己的公钥 PuK; 客户端产生本次对话的对称密钥 SK,并用 PuK 进行加密得到 SK_Enc 后传给服务端; 服务端收到 SK_Enc 后用自己的私钥 PrK 解密得到 SK;若成功,则返回客户端 OK,否则终止对话. 接下来,客户端和服务端的对话均用 S...

2020-04-16 13:17:33 3150

原创 【MySQL】索引的那些前世今生

目录1.分类1.1 按语法1.2 按物理存储结构1.3 按数据结构1.3.1 Btree索引1.3.2 Hash索引1.3按字段数量2. 设计索引2.1 选择合适的数据类型3.命中索引1.分类1.1 按语法类别 语法 描述 普通索引 index KEY `idx_pay_sp_order` (`F_sp_no`,`F_or...

2020-04-10 21:14:02 245

原创 【HTTP】状态码表速查

类型 状态码 描述 1xx消息 100 Continue 101 Switching Protocols 102 Processing 2xx成功 200 OK 成功 201 Created 202 Accepted 203 Non Authoritative information 204 N...

2020-04-08 18:36:52 455

原创 【并发】锁的品种为什么辣么多

目录1.悲观锁 VS 乐观锁2.公平锁 VS 非公平锁3.独占锁 VS 共享锁4.可重入锁5.自旋锁1.悲观锁 VS 乐观锁互斥同步属于一种悲观的并发策略:其总是认为只要不去做正确的同步措施(例如加锁),那就肯定会出现问题,无论共享的数据是否真的会出现竞争,它都会进行加锁,这会导致用户态到核心态转换、维护锁计数器和检查是否有被阻塞的线程需要被唤醒等开销。基于冲...

2020-04-07 16:01:53 125

原创 【MySQL】你要搞清楚存储引擎之间的差别,哟

目录1.概况对比2.索引对比2.1 InnoDB2.1.1聚集索引2.2myIsam3.事务4.锁1.概况对比对比各个存储引擎之间的特性特性 InnoDB MyIsam Memory Merge NDB 事务 √ ✕ ✕ ✕ ✕ 外键 √ ✕ ✕ ✕ ✕ ...

2020-04-04 23:00:13 186

原创 【redis】一篇文章快速了解redis

目录1.数据类型2.memcachedVSredis对比3.部署模式4.持久化5.过期策略expire6.淘汰策略(内存达到阈值)7.常见术语1.数据类型数据类型 样例解释 优缺点 操作 应用场景 string key:value 简单 set、get、del SETEX expire...

2020-04-03 17:53:37 199

原创 【DB】Redis、MemCached、MongoDB、MySQL对比

对比DB 特性 数据结构 查询 附加特性 Ops(并发性能) Latency时延 Redis 内存 非关系 多种数据结构 (主要Key-Value) String List Set、Sorted Set Hash 各种数据类型查询 ...

2020-04-03 10:24:41 231

原创 【并发编程】一张图彻底理解了ReentrantLock和AQS

类比synchronized synchronized ReentrantLock 相同点 可重入 比如一个线程获得了某个对象的锁,此时这个对象锁还没有释放,当其再次想要获取这个对象的锁的时候还是可以获取的 不同点 JVM实现 JDK API (java.util.concurrent) ...

2020-04-01 13:53:08 275

原创 【OSGI】用OSGI解决JAR包冲突

目录1.简介2.基本概念2.1 Bundle2.1.1 隔离2.1.2 交互2.2Service3.框架felix使用3.1加载并解析jar为Bundle3.2 Bundle的Classloader的隔离机制以及类共享机制3.2.1 maven bundle插件export3.3 使用方B获取1.简介OSGi(Open Service Gate...

2020-03-31 17:23:51 1787

原创 【JDK1.6】HashMap死循环形成原因

目录1.扩容形成环路2.get(key)操作死循环1.扩容形成环路在put元素超过负载阈值时会触发HashMap的扩容resize操作,一个桶的链表会重新散列到新表中, /** * put 插入元素之后,负载超过阈值,触发resize方法扩容 */ void addEntry(int hash, K key, V value, int bu...

2020-03-27 17:26:39 728

原创 【bugfix】记一次CPU飙高的排查经历

1.定位进程top拿到cpu占用最高进程的进程号pid=143982.定位线程top -H -p pid 特定进程中的线程top -H -p 14398找到最高的线程id:29230、29156、29151、29197、29240、29284、29291转换成hex十六进制:722e、71e4、71df、720d、7238、7264、726b3.线程虚拟机栈分析...

2020-03-27 11:47:51 485

原创 【JDK1.8源码】ConcurrentHashMap并发容器图解

1.类图对比HashMapConcurrentHashMap(CHM) HashMap(HM) 2.并发实现2.1 内部对象安全发布数据结构与HashMap对比可以发现table是大体相似的,而entrySet等返回的都是View的视图包装类。防止直接发布内部容器,被意外修改,导致Map的不变式约束被破坏,数据不一致不完整。读写操作都做了重写,当对ent...

2020-03-24 21:05:38 324

原创 【并发】为什么HashMap是线程不安全的?

0.背景经常会看到说HashMap是线程不安全的,ConcurrentHashMap是线程安全的等等说法,不禁有个疑问,什么是线程安全?什么样的类是线程安全的?1.什么是线程安全性(what)线程安全定义,最核心是正确性,正确性:多个线程访问某个类,不管怎么调度这些线程,其代码中不需要额外的同步或协同(synchronized),这个类依然有正确的行为。线程安全类封装了必要的同...

2020-03-23 13:43:01 3438

原创 【git】图解git常用操作

1.commit 提交右边展示了一个(小型)Git 代码库。当前分支master上有两个提交记录 —— 初始提交C0和其后可能包含某些有用修改的提交C1。当你做了一些修改,并通过以下命令再次提交后,就会有一个新的提交记录C2git add .git commit -m 'C2'2.branch 分支Git 的分支也非常轻量。它们只是简单地指向某个提交纪录,建立多个...

2020-03-20 15:19:43 206

原创 【并发编程】Executor线程池框架-图文源码详解

目录0框架类图1. Executors工具类2 ThreadPoolExecutor2.1API常用方法2.1.1 构造方法2.1.2 核心方法execute(Runnable r)2.1.3 addWorker创建工作线程2.2组件解析2.2.1 worker2.2.2 ThreadFactory2.2.3BlockingQueue0框...

2020-03-19 18:29:26 343

pythonlearn.pdf

python4Everyone python最好的教材,英文,简单移动,案例丰富 网络访问、数据库、可视化

2020-07-12

seckill.zip

Java秒杀系统实现源码,传统WEB服务SSM技术栈,新手上路非常有用。 简易实现,并发思考,实战指南

2020-05-13

mysql管理.xmind

xmind文件,Mysql的学习笔记,包含innodb存储实现、索引等内容

2019-05-10

HTTP Developer's Handbook开发手册英文

HTTP 服务端、客户端开发者必备的开发手册,非常实用,所用的英文也浅显易懂,阅读无难度。

2019-04-26

最常用linux命令

工作中最常用linux命令 的脑图文件,包含文件操作、目录操作、网络查看、权限更改等等

2019-04-26

Think in C++

很专业的原文书,是C++老师强烈推荐的,看了很有帮助

2012-10-15

数据结构—清华大写严蔚敏

严蔚敏的中文版数据结构书对应的PPT,很好用

2012-10-15

C++数据结构与程序设计(译本)

是英文原文书的译本,由清华大学钱丽萍翻译

2012-10-15

空空如也

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

TA关注的人

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