William

不管走了多远都不要忘记为什么出发

0%

字典的过滤

根据键或者值进行大量数据的字典过滤,应尽量选取生成器表达式,或者字典解析式,前者效率更好

以下是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from datetime import datetime

num_list = [5, 6]
d1 = {
"1": 2,
"2": 5,
"3": 6,
"4": 1,
"5": 3
}
s1 = datetime.now()
d2 = {k: v for k, v in d1.items() if v in num_list}
print d2
s2 = datetime.now()
print (s2 - s1)

s3 = datetime.now()
d3 = ({k, v} for k, v in d1.items() if v in num_list)
print dict(list(d3))
s4 = datetime.now()
print (s4 - s3)

输出:

1
2
3
4
5
6
{'3': 6, '2': 5}
0:00:00.001191
3 6
2 5
{'3': 6, '2': 5}
0:00:00.000033

可见生成器表达式高出几个量级的处理效率,当然数据比较少的时候可以使用字典解析,占用较少的内存。

提升github上 clone 或 push 慢的原因:不是 github.com 的域名被限制了,而是 github.global.ssl.fastly.net 这个域名被限制了,最终导致git的速度最高只能达到20KB/S,通过以下方法解决:

  • 首先通过DNS查询工具,查询域名的解析,输入"github.global.ssl.fastly.net",查到””TTL”值最小的,以北京【联调】IP为例:151.101.229.194;
  • 在mac终端执行:sudo vim /etc/hosts,在后面追加"151.101.229.194 github.global.ssl.fastly.net",点击保存。

例如:
192.30.253.113 github.com
151.101.229.194 github.global.ssl.fastly.net

Android 中的线程和线程池

我们知道线程是CPU调度的最小单位。在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的。在Android中,除了Thread外,扮演线程的角色有很多,如AsyncTask,IntentService和HandlerThread等等。良好的线程使用习惯有助于减少 app 出现崩溃和性能开销的风险,接下来介绍一下线程池的使用。

线程池的好处

不知道大家有没有遇到过这种情况。我们在写项目,遇到耗时操作的时候,怎么办呢,是不是new Thread().start,那这样的话,整个项目中得new多少个Thread。这种明显是很浪费性能。那么有没有一种可以方法对线程进行复用呢?答案就是线程池。

先说一下线程池的好处:

  • 重用线程池中的线程,避免因为线程的创建和销毁带来的性能开销。
  • 能有效的控制线程池中的线程并发数,避免大量线程之间因为互相抢占资源而导致的阻塞现象。
  • 能够对线程进行简单的管理,并提供定时执行以及指定间隔循环执行等功能。
    阅读全文 »

方法一

通过端口查询PID

通过lsof + 端口查询pid

1
2
3
lsof -i:8644
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 14306 work 3u IPv4 332406 0t0 TCP *:8644 (LISTEN)
阅读全文 »

版本

如果需要使用mysql作为数据库,sonarqueb版本的不能高于7.9及以上。

安装

1 JAVA与Mysql

使用sonarqube6.7.5版本,故安装jdk1.8即可

2 sonarqube安装

下载直接放到/usr/local/

环境变量和数据库配置

在.bash_profile文件中增加

1
2
export OCLINT_HOME=/usr/local/oclint-0.13
export PATH=$OCLINT_HOME/bin:$PATH

数据库设置:

1
2
3
4
5
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
阅读全文 »

简单介绍

am指令是 activity manager的缩写,可以启动Service、Broadcast,杀进程,监控等功能,这些功能都非常便捷调试程序。

可以通过adb shell 进入Android 的Linux命令界面,输入am -help查看详细命令,先介绍几个简单用法.

1
2
3
4
5
6
7
8
//使用Action方式打开系统设置-输入法设置
am start -a android.settings.INPUT_METHOD_SETTINGS

//使用Action方式打开网站https://amberweather.com
am start -a android.intent.action.VIEW -d https://amberweather.com

//打开拨号界面,并传递一个DATA_URI数据给拨号界面
am start -a android.intent.action.CALL -d tel:10086
阅读全文 »

已经研究过appium+xcode10方式启动任意应用,之后通过TraceUlity解析trace数据获取性能数据,当然在ppt中也写过,知其然知其所以然,appium是通过Instruments -w udid -t Activity Monitor -D /var/folders/kd/6rx5zx0933jbprw8dygcr4s40000gn/T/20181120-93821-1u26x7f.vt4y/appium_perf_Activity_Monitor_1545301850892.trace -l 60000 -p 12620来启动instrument录制性能的。那么顺势就研究一下如何通过命令行启动instruments吧!

阅读全文 »

本篇文章主要记录目前比较流行的 RESTful api 设计规范,为后续开发各种平台提供接口设计规范。

阅读全文 »

  去年大致同期就研究过MLeaksFinderFBRetainCycleDetector两个关于iOS内存泄漏的监控工具。前者的思路是:通常一个 UIViewController 在被 pop 之后将会很快被释放,假设在 pop 3 秒钟之后仍然没有被释放,则可以认为这个 UIViewController 存在泄漏的问题。在后续的更新版本中,MLeaksFinder 也依赖了 Facebook 的FBRetainCycleDetector来辅助判断内存泄漏是否是由循环引用引起的。后者的原理是在 Objective-C 中检测循环引用可以抽象为在一个节点为对象,边为对象之间的引用关系的有向无环图(DAG 图)中寻找存在的环。当所有的 Objective-C 对象已经在我们的有向无环图中时,我们所需要做的就是通过深度优先搜索算法来遍历它,并找到循环节点。关于FBRetainCycleDetector的详细解释实践参考该博客《如何在 iOS 中解决循环引用的问题》

阅读全文 »

  长久以来iOS上的电量测试相关信息都是很单一,唯一能获取电量详细信息的私有接口也在iOS9中被苹果官方封掉了。传统方案获取电量的路几乎在新的系统版本下被堵死,使得我们不得不寻求新的电量获取方式。

阅读全文 »