自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

happy_teemo的博客

享受生活,热爱编程

  • 博客(310)
  • 资源 (11)
  • 论坛 (3)
  • 收藏
  • 关注

原创 kafka的安装和基本使用

安装下载kafka是基于java环境的,所以需要先安装java环境centos:yum install java-11-openjdkubuntu:apt install default-jdk下载wget https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz复制代码解压tar -zxvf kafka_2.11-2.2.0.tgz cd kafka_2.11-2.2.0 简单配置下vim confi

2021-04-14 17:07:49 36

原创 kafka简介

kafka简介producer:生产者。consumer:消费者。topic: 主题(Topic)。broker:节点;消费者可以订阅一个或多个主题(topic), 并从Broker拉数据,从而消费这些已发布的消息。Consumer Offset(消费者位移):表示消费者消费进度,每个消费者都有自己的消费者位移。Consumer Group(消费者组):多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。规则:一个topic的消息S 只能被 同群中的一个人 消费。可以

2021-04-14 17:07:33 29

原创 kafka 监控 kafka eagle

官方文档:http://www.kafka-eagle.org/articles/docs/installation/linux-macos.html下载Kafka Eaglehttps://link.zhihu.com/?target=http%3A//download.smartloli.orgkafka-eagle-bin-1.2.3.tar.gz复制到Linux解压 tar -xvf kafka-eagle-bin-1.2.3.tar.gz重命名:mv kafka-eagle-bin-1

2021-04-14 17:07:25 11

原创 一个小型公司怎么落地微服务

背景我所在的公司是一家做直播和视频通话APP的公司,我主要负责服务端。最开始我们的架构很简单,就是单体PHP,全部用lumen写成。Redis缓存都用的少,后端人员也只有两人。此时最大的问题主要是慢,单机扛不住多少并发。大概2年前想要做直播,开始引进声望、腾讯IM,但是直播房间需要大量的缓存处理,swoole开始进入我的视野。将架构拆分成了API和服务,服务使用的swoft1.0。将原来的lumen还是作为API层保留了。此时的问题主要是curl请求依然是一条通道,导致注册IM的时候卡顿,一旦推广人

2021-04-14 17:07:18 43 2

原创 PHP怎样写延时队列(定时器)

背景PHP没有定时器,依托的都是crontab这样的系统工具,也没有go中defer这样的延时方法,本文介绍几种PHP写延时队列的几种姿势。延时队列的定义普通的队列是先进先出,但是延时队列并不是,而是加上了时间这一权重。希望到达时间点的先执行。从某种意义上来讲,延迟队列的结构并不像一个队列,而更像是一种以时间为权重的有序堆结构。Hash将key使用一个唯一标识,保证每个任务都不重复,也方便删除,然后value中添加需要调用的函数名和时间戳,以及参数。没秒进行遍历,然后将时间到的取出来执行,

2021-04-14 17:07:11 31

原创 【微服务理论】01.微服务概览

为什么讲Go要先将微服务?首先是因为架构思路是编码的基石,如果脑海中没有架构思路,编码就是一叶障目,看不到全局也就不可能写出好的代码。先别急着撸代码,先看看理论,有个大致的概念。原理可能看看就能懂,但是只有经历了实践,体会了痛点,才能理解和吸收。架构选型组织沟通方式决定系统设计。一定要根据自己的公司体量、业务形态来选择架构,好的架构都是一步步演进过来的。不要过于崇尚新技术、新架构。单体架构,巨石架构1-4人小团队首选,放开膀子就是撸。别上来就微服务,几个开发人员的小公司,去追求微服务、去

2021-04-14 17:06:59 57 1

原创 白话Nginx的IO模型

本文主要介绍linux的5种IO模型,已经nginx和apache的IO模型区别。我会尽量用口语化的语言来解释。纯属个人理解,如果有不对的地方欢迎指正。针对结论党首先先说三个名字:select、poll、epoll效率:select < poll < epoll栗子:学生做题,老师检查方案1:老师一个个问 — select方案2:多个老师 — poll方案3:学生做完了主动回答。— epoll显然,方案3效率更高。Linux的5种IO模型网络IO的本质是socket的

2021-04-14 17:06:49 18

原创 【Nginx从入门到实践】【基础篇】04.Nginx 基本配置语法

基本配置# 设置nginx服务的系统使用用户user nginx;# 工作进程数worker_processes auto;# 错误日志目录error_log /var/log/nginx/error.log;# nginx服务启动时候pidpid /run/nginx.pid;# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.# 加载模块include /usr/share/nginx/modules/

2021-03-17 13:31:33 17

原创 【Nginx从入门到实践】【基础篇】 03.Nginx安装和目录

安装环境安装确认#环境安装确认-------------------#确认网络连通ping www.baidu.com#yum可用 yum list |grep gcc#关闭iptables规则iptables -L 查看 iptables -L 关闭iptables -t nat -L iptables -t nat -F#停用selinuxgetenforce 查看setenforce 0 关闭基本库安装yum -y install gcc g++ autoc

2021-03-13 16:05:10 21 2

原创 【Nginx从入门到实践】【基础篇】 02.Nginx实现优点

架构整体众所周知,Nginx 性能高,而 Nginx 的高性能与其架构是分不开的。那么 Nginx 究竟是怎么样的呢?这一节我们先来初识一下 Nginx 框架吧。Nginx 在启动后,在 unix 系统中会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。我们也可以手动地关掉后台模式,让 Nginx 在前台运行,并且通过配置让 Nginx 取消 master 进程,从而可以使 Nginx 以单进程方式运行。很显然,生产环境下我们肯定不会这么做,所以关闭

2021-03-13 15:50:03 31 2

原创 【Nginx从入门到实践】【基础篇】 01. Nginx是什么

中间件* 减少耦合,减少危险操作* 负载均衡* 缓存* 安全防护* 权限控制Nginx中间件,不局限于业务逻辑,有效独立于后台开发框架(不论后端是Java开发、PHP开发、或者其他语言框架)都能做到平台通用不仅重实践、也会结合原理(如:Http协议、操作系统),让你理解背后的原理更有利于你解决实际问题(如:bug解决、二次开发等)什么是NginxNginx (engine x)是一个开源、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP服务”

2021-03-13 15:23:18 19

原创 Nginx编译安装Lua模块

原文:http://www.imooc.com/article/19597一、安装LUA环境及相关库官方网站:https://github.com/openresty/lua-nginx-module1、LuaJITwget http://luajit.org/download/LuaJIT-2.0.2.tar.gzmake install PREFIX=/usr/local/LuaJITexport LUAJIT_LIB=/usr/local/LuaJIT/libexport LUAJIT_

2021-03-13 14:21:30 19

原创 Kafka工作流程分析

存储机制Kafka 中消息是以 topic 进行分类的, 生产者生产消息,消费者消费消息,都是面向 topic的。topic 是逻辑上的概念,而 partition 是物理上的概念,每个 partition 对应于一个 log 文件,该 log 文件中存储的就是 producer 生产的数据。 Producer 生产的数据会被不断追加到该log 文件末端,且每条数据都有自己的 offset。 消费者组中的每个消费者, 都会实时记录自己消费到了哪个 offset,以便出错恢复时,从上次的位置继续消费由

2021-03-09 14:29:32 13

原创 kafka编程 php

kafka编程php安装扩展# 先安装rdkfka库文件git clone https://github.com/edenhill/librdkafka.gitcd librdkafka/./configure makesudo make installgit clone https://github.com/arnaud-lb/php-rdkafka.gitcd php-rdkafkaphpize./configuremake all -j 5sudo make instal

2021-03-09 13:32:11 18

原创 数据一致性的一些思考

结论没有银弹,需要根据自己的业务场景做取舍。业务量有多少,需要主从读写分离么,需要分库分表么?是读多还是写多?是要最终一致性,还是强一致性?对缓存一致性的要求是多少?1分钟?一秒钟?查询结构是怎样的。是需要多表合并,还是多行合并,还是多库合并?该如何容灾?更新、删除缓存失败你能不能接受?写数据库失败怎么办?如果删除缓存失败,你还允不允许更新数据库?要根据实际业务场景来定制方案。DB主从一致大部分业务场景都是读多写少,而且数据库(mysql)写很少看到写挂的,都是读有瓶颈。所以主从

2021-03-03 19:22:47 42 1

原创 Go websocket EOF bug

背景使用的 golang.org/x/net/websocket 包,前端一发来消息就报错if err = websocket.Message.Receive(ws, &msg); err != nil { vlog.Error("接收消息错误:", err) return}报错:接收消息错误: EOF排查先排除了下网络问题,发现是OK的。反复看了下代码,感觉没啥问题啊,于是搜了个demo。https://www.cnblogs.com/lanyangsh/p/919029

2021-03-03 15:21:18 37 1

原创 Go 跳出 for-switch 和 for-select 代码块

没有指定标签的 break 只会跳出 switch/select 语句,若不能使用 return 语句跳出的话,可为 break 跳出标签指定的代码块:// break 配合 label 跳出指定代码块func main() {loop: for { switch { case true: fmt.Println("breaking out...") //break // 死循环,一直打印 breaking

2021-03-03 15:14:40 19 1

原创 Golang 接入MySQL timestamp类型 是[]int8

表中有一个字段create_time, 在mysql中的类型是timestamp, 在go中对应的类型是 *time.Time. 在导出查询结果的时候, 遇到这样的报错 sql: Scan error on column index 6: unsupported Scan, storing driver.Value type []uint8 into type *time.Time看起来是驱动读取timestamp类型的数据时, 直接读取为int8的格式, 然后在尝试赋值到time.Time的时候出

2021-02-23 20:25:38 99

原创 C程序员必背

十进制----->二进制0---------->0000 00001---------->0000 00012---------->0000 00104---------->0000 01008---------->0000 100016-------- >0001 00002的n次幂2的10次幂:10249----->5148----->2566----->644----->16...

2021-01-31 16:47:14 10

原创 C++ vector

基本操作(1)头文件#include.(2)创建vector对象,vector vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。(5)使用迭代器访问元素.vector::iterator it;for(it=vec.begin();it!=vec.end();it++)cout<<*it<<endl;(6)插入元素: vec.insert(

2021-01-31 16:46:13 10

原创 C++ STL的使用

标准模板库(Standard Template Library,STL)模板是 C++ 语言中重要的概念。它提供了一种通用的方法来开发重用的代码,即以创建参数化的 C++ 类型。模板分为两种类型:函数模板和类模板。函数模板的用法同 C++ 预处理器的用法有一定的类似之处,它们都提供编译代码过程中的文本替换功能,但函数模板还能对类型进行一定的保护。使用类模板可以编写通用的、类型安全的类。#include <iostream>using namespace std;/*int su

2021-01-31 16:39:51 10

原创 C++ list判断选中了哪一行

CString str; for(int i=0; i<m_list.GetItemCount(); i++) { if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED ) { str.Format(_T("选中了第%d行"), i); AfxMessageBox(str); } .

2021-01-31 16:37:44 17

原创 CList的使用

1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标LVS_SMALLICON: 为每个item显示小图标LVS_LIST: 显示一列带有小图标的itemLVS_REPORT: 显示item详细资料//2. 设置listctrl 风格及扩展风格LONG lStyle;lStyle = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//获取当前窗口stylelStyle &= ~LVS_TYPEMASK; //清除显示

2021-01-31 16:37:05 14

原创 C++操作excel

Excel::_WorksheetPtr sheet;Excel::_WorkbookPtr workbook;Excel::_ApplicationPtr ptrExcelApp;Excel::RangePtr ptrRange;Excel::RangePtr ptrCols;Excel::RangePtr ptrRangeHead;Excel::RangePtr ptrRangeVal;Excel::RangePtr ptrResizeRange;Excel::RangePtr ptr

2021-01-31 16:35:26 47

原创 C语言面试及答案分析 第二部分 程序代码评价或者找错

第二部分:程序代码评价或者找错1、下面的代码输出是什么,为什么?void foo(void){ unsigned int a = 6; int b = -20; (a+b > 6) ? puts(“> 6″) : puts(“<= 6");}这个问题测试你是否懂得C语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。不管如何,这无符号整型问题的答案是输出是 ">6″。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-2

2021-01-31 16:33:34 230

原创 C语言面试及答案分析 第一部分 理论

第一部分:基本概念及其它问答题1、关键字static的作用是什么?这个简单的问题很少有人能回答完全。在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。大多数应试者能正

2021-01-31 15:57:58 223

原创 CString,string,char*之间的转换

1 string to CStringCString.format("%s",string.c_str());2 CString to stringstring str(CString.GetBuffer(str.GetLength()));3 string to char *char *p=string.c_str();4 char * to stringstring str(char*);5 CString to char *strcpy(char,CString,sizeof(ch.

2021-01-31 14:00:06 14 2

原创 不要为了流量忘记初心

有时候,自己很用心写的干货,没什么人看,但是一个无心的水文,阅读量飙升。你是否会动摇?有时候,自己的文章阅读量上来了,有了流量,看到做公众号等自媒体的加上一点水文赚的盆满钵满。你是否会动摇?那么,你的初心是什么?是为了帮助那些新人少踩坑?是为了记录一下自己的学习生活历程?还是为了吸引眼球,开展副业?都可以,但是不要忘记初心。对于我,我想以后做纯干货,不要把一些大家到处都能百度到的东西粘贴一下就成一个系列。而是将自己的思考和体会,或者是真正的坑写出来。减少水分,节约阅读时间,获得真正的知识。

2021-01-31 11:10:56 42

原创 【微服务落地】服务间通信方式: gRPC的入门

gRPC是什么官方介绍:https://grpc.io/docs/what-is-grpc/introduction/“A high-performance, open-source universal RPC framework”多语言:语言中立,支持多种语言。轻量级、高性能:序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种语言无关的高性能序列化框架。IDL:基于文件定义服务,通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub。设

2021-01-30 15:55:29 36

原创 opencache的安装和使用-----以及代码不更新的问题

PHP作为脚本语言, 效率是比较低下的。现在的加速方式基本是两种:swoole:直接常驻内存。opencache:将编译后的脚本缓存起来。原始流程:加入cache流程配置官网注释,就在php.ini里面[opcache]; Determines if Zend OPCache is enabled;opcache.enable=1; Determines if Zend OPCache is enabled for the CLI version of PHP;opcach

2021-01-30 11:53:04 47

原创 sync map的使用和源码分析

使用• Store 写入• Load 读取,返回值有两个,第一个是value,第二个是bool变量表示key是否存在• Delete 删除• LoadOrStore 存在就读,不存在就写• Range 遍历,表示对所有key进行遍历,并将遍历出的key,value传入回调函数进行函数调用,回调函数返回false时遍历结束,否则遍历完所有key.package main import ( "fmt" "sync") // 遍历时删除所有的偶数,结果:确实删除了所

2021-01-27 09:38:47 8

原创 【微服务理论】CQRS的实际应用

分层所谓架构就是一层加一层。当我们一层过于冗余的时候,就加一层。当我们两层之间耦合太严重的时候,加一层。当我们不希望每个人都做这个事情的时候,就加一层帮我们做。典型:MVCBFF中间件CQRSCQS(Command Query Separation,命令查询分离)很多时候,我们希望访问的更快,减少查询对接口的影响,而这个数据是定期刷新的。怎么办?命令和查询分离。用一个命令定期生成数据到缓存,然后查询直接查询这个缓存。异步队列也是一样的逻辑。将立即要做的事情完成了就

2021-01-25 21:10:46 44 2

原创 【微服务理论】微服务该怎么划分

上篇说到了整体架构的模型。API网关+BFF数据组装+服务层那么服务层如何划分呢?按什么划分比如客户部门、物流部门、财务部门这样。但是这样划分的很少。还有一种按业务分解决不同业务问题。比如稿件组、视频组、漫画组、评论组、弹幕组。一般一个服务稳定了就可以交给底下的人维护了,主力就继续开发下一个服务。分多细细的好处:(1)服务都能够独立部署(2)扩容和缩容方便,有利于提高资源利用率(3)拆得越细,耦合相对会减小(4)拆得越细,容错相对会更好,一个服务出问题不影响其他服务(5)扩

2021-01-25 20:57:04 40 2

原创 【微服务理论】听说你不知道康威定律?

康威定律是马尔文·康威1967提出的:“设计系统的架构受制于产生这些设计的组织的沟通结构。”通俗的来讲:产品必然是其(人员)组织沟通结构的缩影。跨部门沟通是非常难的,系统各个模块的接口也反映了它们之间的信息流动和合作方式。康威定律可谓软件架构设计中的第一定律,起初只是在杂志上的发表,后经过《人月神话》这本软件界圣经的引用,并命名为康威定律(Conway’s law),因此得以推广。只通过简单的描述可能无法理解康威定律的精髓所在,原文中康威定律可总结为四个定律:第一定律 组织沟通方式会通过

2021-01-24 14:36:41 45 1

原创 【微服务理论】API + BFF 不再为兼容和适配烦恼

对于微服务,常见的架构模型就是API网关+服务。API网关实现鉴权、负载均衡、中间件等公共入口逻辑。服务实现具体的业务功能。那么,API网关设计中又有什么坑呢?1.0版本直接将服务穿透到外网。API层只是套了壳,加了鉴权、中间件而已。具体返回值由服务定。客户端到微服务直接通信,强耦合。根本不敢重构,一改结构客户端就崩了。需要多次请求,客户端聚合数据,工作量巨大,延迟高。如果一个页面由多个服务组成,比如商品、优惠券、相关推荐、评价。客户端要请求多个接口,命名规则还不一样。有的接口成

2021-01-24 14:24:30 67 1

原创 【go写设计模式】单例模式--全都用我的

单例模式目的减少资源消息,只用初始化一次就可以了。可以统一调用者,方便管理。主要针对频繁使用的类。比如mysql、redis等。实现懒汉式:在使用的时候再初始化。饿汉式:最开始就初始化。...

2021-01-18 14:30:12 9

原创 怎样才算是个合格的程序员?

互联网行业的兴起,程序员的数量也越来越多,科班出身、自学成才、培训量产等等,高薪吸引着越来越多的人进入这个行业,那么怎么判断一个人是不是个合格的程序员,又或者适不适合做一个程序员呢?性格很多人的认知里,程序员就是沉默寡言,格子衫,不善沟通。从我个人来说,话是真的会变少,习惯了和电脑沟通,习惯了一个人沉思,也习惯了用打字交流。由于加班多,业余时间少,和朋友出去玩的机会就更少了,渐渐交际圈变窄,也会让人越来越内向,也越来越不会讲话。所以如果你是个耐不住寂寞的,希望大部分时间都能和大家一起完成工作的,那

2021-01-17 20:31:52 101 4

原创 【设计模式】最快理解设计模式的几大原则

设计模式的真正境界,就是看懂,然后忘记。单一职责原则只干一件事。这个粒度越小,就越好复用,重复代码就越少,但是代码量也越多,需要自己权衡。里氏替换原则子类可以扩展父类的功能,但不能改变父类原有的功能。可以尽量减少重复作用的类,也防止调用父子类同名方法造成不同的效果。问题:继承的层级过多,子类会很庞大,如果并不需要用父类的方法, 就很冗余。例子:父亲会移动,用的腿。儿子也会移动,用的车。调用者想用腿走,但是调用儿子的移动,就会有问题。所以要儿子实现开车方法,让调用者自己选择。开闭原则

2021-01-16 16:26:27 43 1

原创 【设计模式】思考-设计模式有什么用?

一般开始学习一个新的知识前,我会思考为什么要学,他对于我的工作和生活有什么帮助?对于设计模式,主要是为了应对代码难以维护的问题。比如结构混乱,复用性太低,或者一个新需求需要改很多旧代码。那么,什么是好的软件设计?高内聚,低耦合好维护,好复用什么是垃圾的设计?新需求需要改的地方很多,甚至要重写。改一个地方发现牵一发而动全身,根本不敢改。全是if else ,要逐步去加判断。让调用者去关心实现逻辑。也就是我用一个方法或者类,还要把这个类理解一遍。总体的思想:抽象、复用、单一职责。其实

2021-01-16 14:18:15 15

原创 【hugo】从安装到美化

安装下载地址https://github.com/gohugoio/hugo/releases新建个目录放进去C:\hugo然后添加环境变量然后选个你放博客的目录执行hugo new site blogcd bloghugo server选择主题我选择是的 eureka他的官方文档https://www.wangchucheng.com/zh/docs/eureka/git submodule add https://github.com/wangchucheng/hu

2021-01-15 11:55:22 69

qt-unified-windows-x86-3.0.0-online.exeQT在线安装

QT在线安装版

2017-08-25

MSChart Example.zip

MSChart Example.zip

2021-02-03

PrintScreen.zip

截屏处理学习demo

2021-02-03

VS编译所需要的各种dll

VS编译所需要的各种dll

2017-08-25

SqlServer2008安装教程

SqlServer2008安装教程

2017-08-25

lua-resty-redis

cd lua-resty-redis 执行 make install cp dkjson.lua /usr/local/lib/lua

2018-10-17

TortoiseSVN_1.9.4.27285_x64.msi

TortoiseSVN_1.9.4.27285_x64.msi

2017-08-25

ADO操作Oracle

用ado接口操作Oracle

2017-06-20

Ado操作Access

用ado操作access

2017-06-20

vs配置文件

vs配置文件

2017-08-25

MFC类库详解

2017-04-05

个人博客列表不能分类看啊

发表于 2018-01-26 最后回复 2018-01-27

C#点运行直接中断

发表于 2017-08-30 最后回复 2017-08-31

如何使用Sqort对Carray结构体数组进行排序

发表于 2017-08-02 最后回复 2017-08-02

空空如也

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

TA关注的人 TA的粉丝

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