uniapp微信小程序callMethod调研记录
官方模板项目搭建uni-app官网
这里搭建起来的是官方项目,便于研究自带的测试api
准备模板12345678# 全局安装vue-clinpm install -g @vue/cli# 创建项目,选择Hello uni-app模板vue create -p dcloudio/uni-preset-vue#alpha my-project# 安装测试依赖包npm install @dcloudio/uni-automator --save-dev
修改配置修改jest.config.js 中的testEnvironmentOptions ,添加以下配置
123456789101112testEnvironmentOptions: { "mp-weixin": { port: 9420, // 默认 9420 account: "", // 测试账号 args: "", // 指定开发者工具参数 cwd: "D:/software/微信web开发者工具& ...
MySQL慢查询优化
优化出发点大部分情况下一般是考虑索引,但是其他方面也值得考虑。
数据库级别
表的结构:列是否具有正确的数据类型?表的结构是否设计正确,例如,频繁更新的应用的表结构应该是少列多表,分析大量数据的应用应该是少表多列
是否创建索引?索引是否有用?
是否选择了合适的存储引擎,这个现在一般是InnoDB
表是否使用正确的行格式(ROW_FORMAT)?特别是ROW_FORMAT为COMPRESSED 的表使用较少的磁盘空间,因此需要较少的磁盘I/O来读写数据
应用程序是否使用了适当的锁策略?例如在某种情况下允许共享读(shared access),以便数据库操作能够同时进行
缓存大小是否设置正确?足够大的缓存能够容纳经常访问的数据,但是又不能过大,过大导致使用虚拟内存I/O性能下降
硬件级别磁盘种类、速度、CPU、内存等因素
数据类型优化几个简单原则:
更小的通常更好
应该尽量使用可以正确存储数据的最小数据类型。更小的数据类型占用更少磁盘、内存和CPU缓存,并且处理时需要的CPU周期更少。(确保没有低估,如果无法确定哪个数据类型最好,就选择不会超过范围的最小类型)
简单就好
简单类型 ...
MIT6.824-Primary-Backup-Replication
What kinds of failures can replication deal with?
“fail-stop” failure of a single replica
fan stops working, CPU overheats and shuts itself down
someone trips over replica’s power cord or network cable(电源线或网络电缆)
software notices it is out of disk space and stops
Maybe not defects in h/w(Hardware/Software) or bugs in s/w or human configuration errors
Two main replication approachesState transfer
Primary replica executes the service
Primary sends [new] state to backups
Replicated state machine ...
MIT6.824-GFS
为什么我们要阅读这篇论文?在分布式系统中,分布式存储是关键的部分,我们该怎么去设计它,分布式存储的interface/semantics 应该怎么定义,它是怎么并行工作的等。
GFS paper涉及到了很多分布式系统主题:parallel performance, fault tolerance, replication, consistency 。从apps到network都有详细的介绍,并且在现实生活中有着成功的应用。
为什么分布式存储这么难?
high performance→将数据拆分到很多服务器上面,通过很多台服务器并行读取数据
many servers→机器一多,机器发生故障的概率会变大,需要容灾机制,能够自动恢复
fault tolerance →最简单的方式就是通过复制得到多个副本,当一个副本出现问题时,其他副本还能用
replication →有数据不一致的风险
better consistency →如果需要更强的一致性的话,在网络中所有不同的服务器和客户端之间需要进行很多额外的工作和交流,那么这样性能就会降低,所以这个不是我们最初想要的
我们想要什么样的一致性? ...
MIT6.824-MapReduce
背景有时候我们需要从一批数据中得到一些结果,比如从最频繁查询的结果集,每个单词出现的次数。随着输入的数据越来越多,为了在合理的时间内完成,单台机器可能会完成不了这个任务,所以我们必须将这个计算压力分担到多个机器上面,并行计算。
但是解决计算的标准化,数据的分配,故障处理,负载均衡等问题是个大工程,让原本简单的代码变得复杂起来。
为此,Google发明了MapReduce系统,隔离了复杂的底层,让程序员能够容易使用这个系统进行大数据量的分布式计算。
编程模型将用户的计算分为两个函数处理:Map和Reduce 函数
Map函数:输入数据,处理后生成一组键值对(中间值)
Reduce函数:处理前面得到的中间值,然后将这些值合并在一起,形成更小的值集。通常,每次 Reduce调用只生成零个或一个输出值。
简约模型:
123map (k1,v1) → list(k2,v2)//这里是指对应k2的结果有多个reduce (k2,list(v2)) → list(v2)
举个例子:
现有大量的文本数据,想统计每个单词出现的次数
123456789map(string documentName ...
项目Golang优化点
一、前言最近接手的一个项目需要预先生成大量缓存(并不是一个好方案,最终ban掉了),在生成缓存处理数据中发现了一些优化点,可以提高速度,在此记录一下,首先可以了解一下如何利用工具找出代码中一些代码块的执行速度。
二、pprof2.1 简介google/pprof
pprof 是用于可视化和分析性能分析数据的工具,这里主要用来定位性能问题
主要有以下数据:
CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况
这里我们主要用到第一点
2.2 结果分析这里使用的是web应用,可以使用 net/http/pprof库,它能够在提供 HTTP 服务进行分析
1go tool pprof ...
Golang反射应用-排序
一、反射Go基础教程可看
Go 系列教程 — 34. 反射
反射
Go 语言反射的实现原理
这里记下用的部分
1.1 reflect.Valuereflect.Value 可以表示一个任意类型的值
1234567891011121314151617181920package mainimport ( "fmt" "reflect")type User struct { Name string Age int}func main() { u := User{"张三", 56} v := reflect.ValueOf(u) fmt.Println(v)}/*output:{张三 56}*/
1.2 reflect.Kind12345678910111213141516171819202122package mainimport ( "fmt" "reflect")type User struct { ...
Arch配置i3wm
下面的某些软件可能在archlinuxcn源,注意先配置
安装ArchArch安装配置笔记
i31sudo pacman -S i3
注意i3-gaps会和i3-wm冲突,默认选择前者
配置文件位置
1~/.config/i3/config
Display manager为了方便管理i3的启动,这里选择使用lightdm 作为启动管理器,安装完后重启即可
1sudo pacman -S lightdm lightdm-gtk-greeter
如果不需要的话也可以在tty输入startx启动
常用键位mod为win键或者alt键,在第一次进入桌面时会选择
打开终端:mod+enter
启动软件:mod+d
横向排列窗口:mod+h
纵向排列窗口:mod+v
将某个窗口全屏:mod+f
退出窗口:mod+shift+q
重启i3:mod+shift+r
打开工作区:mod+num
将当前窗口移动到某工作区:mod+shift+num
美化窗口配置文件末尾加入
12new_window pixel 0gaps inner 7
关闭picom popup_menu透明化复制一份配置文件
1 ...
Golang-range中的坑
range遍历指针类型时注意事项
1234567891011121314151617181920212223242526package mainimport "fmt"func main() { arr := []int{1,2,3,4,5,6,7,8} odd := make([]int, 0, 5) for _, v := range arr{ if v % 2 == 1{ odd = append(odd, v) } } for _, v := range odd{ fmt.Println(v) }}/*output:1357*/
1234567891011121314151617181920212223242526package mainimport "fmt"func main() { arr := []int{1,2,3,4,5,6,7,8} **odd := make([]*int, 0, ...
Golang生成十亿手机号码的探究
优化大量生成手机号码所使用的时间,取得较好的成果
配置既然是计算时间,那么肯定受电脑配置影响,这里贴下配置
win10
随机字符串生成前景以下省略计算时间的代码
12345678910func main() { before := time.Now() fmt.Println(before.Format("2006-01-02 15:04:05")) //... after := time.Now() fmt.Println(after.Format("2006-01-02 15:04:05")) fmt.Println(after.Sub(before))}
单纯跑十亿次循环12345678idx := 0for i := 0; i < 1000000000; i++{ idx++}//2020-09-14 15:01:22//2020-09-14 15:01:22//232.3817ms
十亿次随机获取手机号码1234567891011121314151617181920var hea ...