自定义博客皮肤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的博客

享受生活,热爱编程

  • 博客(246)
  • 资源 (11)
  • 收藏
  • 关注

原创 windows下flutter的环境安装

Flutter使用的是谷歌生态,所以有很多网络不通的情况,如果编译卡住了,可以首先怀疑是网络墙了。这是我个人安装过程中的一些问题,如果还有其他问题,欢迎评论补充。如果有不对的,或者试了没有效果的,也欢迎指正。

2023-09-12 14:41:01 694

原创 Go使用协程批量获取数据,加快接口返回速度

服务端经常需要返回一个列表,里面包含很多用户数据,常规做法当然是遍历然后读缓存。使用Go语言后,可以并发获取,极大提升效率。

2023-02-07 20:03:42 942

原创 加密算法:非对称加密

常见的非对称加密有:RSA算法,椭圆曲线加密算法等。(来源于《我的第一本算法书》)如果第三者拦截了公钥,给了他的公钥,再拦截你的密文,则可以通过自己的私钥解密,得到原文。

2022-06-27 20:51:41 323

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

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

2022-04-06 13:03:11 750

原创 Go语言实现APPID登录

package thirdpartyimport ( "crypto/rsa" "fmt" "github.com/dgrijalva/jwt-go" "github.com/lestrrat-go/jwx/jwk" "github.com/pkg/errors" "github.com/wonderivan/logger" "math/big" "net/http")func bigFromByte(s []uint8) *big.Int { ret := new(big.In

2022-04-06 13:01:55 547

原创 项目实战:动态系统的设计(类似朋友圈)

功能需求发布动态:类似朋友圈的功能,支持图片、文字、视频。读取动态:支持推荐、最新、最热等栏目。删除动态:支持发布者删除,运营删除(包括硬删除和软删除)。审核动态:需要有正常、审核中、封禁中等。动态送礼、点赞:支持给某条动态送礼、点赞。动态运营:运营可以置顶、推荐某个动态,还可以以运营身份发布官方动态。...

2022-04-02 15:18:34 398

原创 Go redis hash存储结构体

需求需要存储用户数据到redis,结构是hash。然后取出来,自动转成结构体。结构体type UserCache struct { Id int64 `json:"id"` }基本步骤https://studygolang.com/articles/20302核心代码:func DoHashStore(conn redis.Conn) { //以hash类型保存 conn.Do("hmset",redis.Args{"struct1"}.AddFl

2022-03-10 10:47:26 2069

原创 白话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-07-31 10:23:32 611

原创 程序员的书都辣么厚,怎么读?

骚年,你渴望力量么?可以说,一本要是完全吸收,没有5-10年功夫下不来的。那么,这种经典我们应该怎么读?有的放矢首先我们要读这本书,肯定是有目的的,比如操作系统,可能我就想知道进程线程的区别,进程的几种状态,那么,就先看这一章,有不懂的再查漏补缺的看。也就是,当工具书。然后慢慢地,大致都有印象了,再慢慢细读,结合大佬的课程或者博客,反复咀嚼,这也是我的另一个建议:买实体书。实体书能更好的做记录和翻阅,可能你一下要看第10章,一下要跳到第三章。由浅入深不要想一口气就吃成胖子,这些大佬的

2021-07-31 10:14:52 6032 13

原创 后端开发必须知道的缓存知识

作为一个后端,如果你没用过缓存,证明你的业务是真的很小,或者你的数据库是真的厉害。那么,你真的会用缓存么?什么时候需要缓存首先最常见的就是接口的返回值加缓存,避免直接查库,尤其是榜单这种查起来很慢,但是访问很频繁的地方。其次是元数据缓存,比如一个用户的信息,一条朋友圈的数据,查的时候只用查ID,然后去点查缓存。最后是异步缓存,比如延时批次写,或者延时批次发包等等。不会有人用缓存做消息队列吧,不会吧不会吧。//todo 为什么不能用Redis做消息队列 (后面我放到消息队列的架构篇说吧)怎么

2021-07-31 10:14:15 447

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

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

2021-07-30 21:01:26 249 1

原创 mysq联表查询

select * from tbl_dept a inner join tbl_emp b on a.id=b.deptId;select * from tbl_dept a left join tbl_emp b on a.id=b.deptId;select * from tbl_dept a right join tbl_emp b on a.id=b.deptId;select * from tbl_dept a right join tbl_emp b on a.id=b.deptId .

2021-07-05 14:00:03 122

原创 crontab指定运行用户

通常运行php时都是指定用户,如www,php。这里以www为例。通过WEB端访问,PHP写入的文件都是属于www用户权限。如果缓存文件,日志文件。如果使用管理员命令行运行php脚本会赋予root权限,导致文件权限混乱。如果通过命令行方式如何使用www用户运行?1.直接运行sudo -u www php -V2.定时任务a.直接管理用户下的定时任务crontab -e -u wwwb.修改定时任务文件vi /etc/crontab代码如下:/3 * * * * www /root/te

2021-06-30 11:40:54 2748

原创 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 927 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 172 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 2531

原创 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 98

原创 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 91

原创 C++ STL的使用

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

2021-01-31 16:39:51 100

原创 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 124 1

原创 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 425

原创 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 2290

原创 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 3949

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

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

2021-01-31 15:57:58 849

原创 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 110 2

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

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

2021-01-31 11:10:56 131

原创 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 787

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

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

2021-01-18 14:30:12 73

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

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

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

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

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

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

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

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

2021-01-16 14:18:15 102

原创 爬虫攻防

2021-01-10 16:53:29 489

原创 安装swoole提示No releases available for package

Mac在mac上执行pecl search swoole安装swoole时提示:No releases available for package "pecl.php.net/swoole" install failedShell解决方法是只需使用root权限即可:sudo pecl search swooleUbuntusudo pecl search swoole[sudo] password for lixin:WARNING: channel "pecl.php.net" ha

2020-12-31 14:39:30 1107

原创 win、mac、linux 下安装Go环境

下载安装包Go安装包下载网址:https://www.golangtc.com/download有zip压缩版和msi安装版两个按本下载。(这里使用msi安装版,比较方便)。运行msi安装文件,千万不要在安装路径中出现中文,一路Next。由于使用msi安装文件,所以Go语言的环境变量已经自动设置好了。测试打开Windows中的命令提示符(cmd.exe)执行命令:查看版本go ...

2020-12-20 20:00:43 264

原创 学霸是怎么学习的?

不要被工具绑架你是否感觉,自己的电子笔记越来越多,或者标签越来越多,我的笔记系统快要崩溃了,好焦虑。那么我们该怎么运用好我们的笔记系统呢?首先,不需要被工具绑架了,没有最好用的工具,只有最适合的攻击。像我之前就是,最开始用的印象笔记,然后发现了onenote,神器啊,可以只有拖拽,好爽,然后就把笔记全部搬到了onenote。后来markdown开始流行,我开始嫌弃onenote贴代码不方便。又开始转向有道云。后来有觉得。。。总之,很多人可能会和我一样,总是被新的工具和新功能迷住,然后在这个过程中浪费

2020-12-05 19:33:57 215

原创 笔记系统整理

你的焦虑不知道你是否有这种感觉:每天被海量的信息淹没。知乎、微博、技术博客、鸡汤文、电视剧、电影、追番。。。很多事情感觉记得,但是他们就像在大海中的浮木,抓不到,没有锚点。很多东西需要学习,但是总是学不完,吸收不了,甚至感觉越学越焦虑。这个数字化的时代,信息仿佛是一种洪流,而碎片化又让我们感受不到重点。我们感觉每一篇文章都很有用,都想留下,但是到最后什么都没有留下。感觉学到了很多,但是最后什么都没留下。这一切,在我看来,都是大脑没有及时被清空,而我们在乎的东西又太多。解决办法有两个:放

2020-12-05 19:33:25 271

原创 学习方法总结

怎样学习和记忆不要机械式背诵以前学英语的时候,有个叫李阳的,提倡通过反复读来达到背诵,只要读的足够多,就能背下来,鼓励大家敢于说,改变只会笔试,不会口语的现象。这个方法对练习英语口语是有帮助的,但是对于很多理科知识不够适用,理科知识更提倡理解记忆,你不需要所有都记得,但是要记得核心公式以及推导过程。不要用输入型记忆很多人喜欢听课的时候记板书,然后大学就记PPT,工作后就记教程,或者拷贝下博客。这都叫输入型记忆。反之,叫输出型记忆。也许你听过,要证明是否真的懂了,就是跟别人讲出来。所以不管用什么方式

2020-11-06 20:04:51 239 2

原创 【算法】限流算法简介

令牌桶算法令牌桶算法算法思想是:令牌以固定速率产生,并缓存到令牌桶中;令牌桶放满时,多余的令牌被丢弃;请求要消耗等比例的令牌才能被处理;令牌不够时,请求被缓存。漏桶算法算法思想是:水(请求)从上方倒入水桶,从水桶下方流出(被处理);来不及流出的水存在水桶中(缓冲),以固定速率流出;水桶满后水溢出(丢弃)。这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。区别漏桶漏桶的出水速度是恒定的,那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。令牌

2020-10-20 20:30:22 92 1

原创 【前端工具】nodejs+npm+vue 安装(windows)

预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架,类比到laravel。webpack是个打包工具。先下载nodejs不会有人不知道下载地址吧,不会吧不会吧。不会就去百度吧。。。这里先默认你已经下载安装好了。配置一下配置镜像站npm config set registry=http://registry.npm.taobao.org 配置目录到D盘npm config set prefix "D

2020-10-07 21:05:10 145

原创 【数据结构】栈和队列

栈栈是一种重要的线性结构。是我们前面讲过的线性表的一种具体形式栈是限定仅在表尾进行插入和删除操作的线性表由于栈本身就是一个线性表,那么我们讲的线性表的顺序存储和链式存储,对于栈来说,都是适用的。我们把允许插入和删除的一端称为栈顶top,另一端称为栈底bottom,不含任何元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO栈的插入操作,叫做进栈,也称为压栈,入栈栈的删除操作,叫做出栈,也称为弹栈抽象数据结构ADT 栈(stack)Data

2020-10-07 08:48:05 187

PrintScreen.zip

截屏处理学习demo

2021-02-03

MSChart Example.zip

MSChart Example.zip

2021-02-03

lua-resty-redis

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

2018-10-17

SqlServer2008安装教程

SqlServer2008安装教程

2017-08-25

vs配置文件

vs配置文件

2017-08-25

TortoiseSVN_1.9.4.27285_x64.msi

TortoiseSVN_1.9.4.27285_x64.msi

2017-08-25

VS编译所需要的各种dll

VS编译所需要的各种dll

2017-08-25

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

QT在线安装版

2017-08-25

Ado操作Access

用ado操作access

2017-06-20

ADO操作Oracle

用ado接口操作Oracle

2017-06-20

MFC类库详解

2017-04-05

空空如也

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

TA关注的人

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