royee

Results 269 issues of royee

需要两个工具: https://github.com/android-hacker/VirtualXposed https://github.com/Fuzion24/JustTrustMe 首先安装第一个VirtualXposed,不需要你ROOT手机的;然后打开VirtualXposed,从VirtualXposed的 “ 添加应用 ” 中找到JustTrustMe的apk安装包并执行安装,JustTrustMe是VirtualXposed的一个模块,所以安装完毕JustTrustMe后,记得在VirtualXposed的模块管理里勾选一下JustTrustMe模块,最后重启一下VirtualXposed让它生效。最后不要忘记了,你想对谁家app进行数据分析,你需要在VirtualXposed里重新安装一边这个app。你就把VirtualXposed当虚拟机对待就行了。

Go中没有`extends`关键字 ```golang type Animal struct { Name string } func (a *Animal) Eat() { fmt.Printf("%v is eating", a.Name) fmt.Println() } type Cat struct { *Animal } cat := &Cat{ Animal:...

golang

链路流程 0、浏览器本地缓存匹配; 1、本地hosts映射对比; 2、本地dns缓存解析; 3、远程dns解析获得服务器ip地址; 4、浏览器发送tcp连接请求包(syn); 5、请求包经过传输层、网络层、数据链路层封装通过网卡到达路由器; 6、路由器转发数据包到所属运营商服务器; 7、运营商服务器通过寻址最短路径通过中继节点到达指定ip地址; 8、服务器端可能存在反向代理或者负载均衡,都是直接转发请求至上游服务器,当然也可以制定安全防御规则直接丢弃请求包; 9、上游服务器收到连接请求,在自身可用的情况下,返回(syn+ack); 10、浏览器校验ack,再次发送(syn+ack); 11、服务器校验ack切换连接状态至established,然后根据请求传输数据包; 12、当transform-encoding为chunked时,浏览器开始渲染页面; 13、四次挥手,连接关闭; 14、渲染数据完成。 渲染的细节 html页面的解析与渲染 客户端浏览器加载了html文件后,由上到下解析html为DOM树(DOM Tree)。 遇到css文件,css中的url发起http请求。 这是第二次http请求,由于http1.1协议增加了Connection: keep-alive声明,故tcp连接不会关闭,可以复用。 http连接是无状态连接,客户端与服务器端需要重新发起请求--响应。在请求css的过程中,解析器继续解析html,然后到了script标签。 由于script可能会改变DOM结构,故解析器停止生成DOM树,解析器被js阻塞,等待js文件发起http请求,然后加载。这是第三次http请求。js执行完成后解析器继续解析。 由于css文件可能会影响js文件的执行结果,因此需等css文件加载完成后再执行。 浏览器收到css文件后,开始解析css文件为CSSOM树(CSS Rule Tree)。 CSSOM树生成后,DOM...

程序

MySQL的四种隔离级别如下: 未提交读(READ UNCOMMITTED) 这就是上面所说的例外情况了,这个隔离级别下,其他事务可以看到本事务没有提交的部分修改.因此会造成脏读的问题(读取到了其他事务未提交的部分,而之后该事务进行了回滚). 这个级别的性能没有足够大的优势,但是又有很多的问题,因此很少使用. 已提交读(READ COMMITTED) 其他事务只能读取到本事务已经提交的部分.这个隔离级别有 不可重复读的问题,在同一个事务内的两次读取,拿到的结果竟然不一样,因为另外一个事务对数据进行了修改. REPEATABLE READ(可重复读) 可重复读隔离级别解决了上面不可重复读的问题(看名字也知道),但是仍然有一个新问题,就是 幻读,当你读取id> 10 的数据行时,对涉及到的所有行加上了读锁,此时例外一个事务新插入了一条id=11的数据,因为是新插入的,所以不会触发上面的锁的排斥,那么进行本事务进行下一次的查询时会发现有一条id=11的数据,而上次的查询操作并没有获取到,再进行插入就会有主键冲突的问题. SERIALIZABLE(可串行化) 这是最高的隔离级别,可以解决上面提到的所有问题,因为他强制将所以的操作串行执行,这会导致并发性能极速下降,因此也不是很常用. InnoDB默认使用的是可重复读隔离级别.

mysql

首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测.AAAA和AAAAB的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询. hash索引虽然在等值查询上较快,但是不稳定.性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差.而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低. 因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度.而不需要使用hash索引. 上面提到了B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据,什么是聚簇索引? 在B+树的索引中,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是聚簇索引和非聚簇索引. 在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引.如果没有唯一键,则隐式的生成一个键来建立聚簇索引. 当查询使用聚簇索引时,在对应的叶子节点,可以获取到整行数据,因此不用再次进行回表查询. 非聚簇索引一定会回表查询吗? 不一定,这涉及到查询语句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再进行回表查询. 举个简单的例子,假设我们在员工表的年龄上建立了索引,那么当进行select age from employee where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询.

mysql

hyperf中连表join查询 ```php Db::table('table_a') ->join('table_b', function ($join) { $join->on('table_a.vcsId', '=', 'table_b.vcsId') ->where('table_a.version', '=', 'table_b.version') }) ->where('table_a.id', 2) ->select('xxxxxx') ->get(); ```

swoole

当使用swoole发生段错误时,向开发组报告。可以使用gdb工具来得到一份bt信息。使用gdb跟踪需要在编译swoole时增加 `--enable-debug`参数

swoole

## Swoole 这篇文章 Timer 毫秒精度的定时器。 ## Timer 主要有三个方法: swoole_timer_tick 间隔的时钟控制器 swoole_timer_after 指定的时间后执行 swoole_timer_clear 删除定时器 示例代码: ``` //每隔3000ms触发一次 $timer_id = swoole_timer_tick(3000, function () { echo "tick 3000ms - ".date('Y-m-d H:i:s')."\n"; });...

swoole

`sudo yum install libwebsockets-devel.x86_64 json-c json-c-devel openssl-devel` 意思就是 libssl-dev是ubuntu系统的库, 而centos系统对应的是openssl-devel , 所以运行centos中运行`yum install openssl-devel`,ubuntu系统运行`apt-get install libssl-dev`

linux
centos

修改显示语言为中文: 打开文件 /etc/sysconfig/i18n 把 LANG字段改为 如下 `LANG="zh_CN.UTF-8"` source /etc/sysconfig/i18n

centos