iOS-判断沙盒中是否已经存在文件

判断方法,类内方法:

//判断文件是否已经在沙盒中已经存在?
-(BOOL) isFileExist:(NSString *)fileName
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
NSString *filePath = [path stringByAppendingPathComponent:fileName];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL result = [fileManager fileExistsAtPath:filePath];
NSLog(@”这个文件已经存在:%@”,result?@”是的”:@”不存在”);
return result;
}

以上是判断cache文件夹,如果判断document文件将:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);

替换为:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

即可。

日本 vultr 服务器怎么样

配置:内存 8G、100G SSD、4CPU、4000G BD

用途:直播

vultr SSD CPU g9 条回复 • 2018-08-10 09:33:37 +08:00
zrj766 1
zrj766 2017-10-24 11:23:48 +08:00
算了,经常 boom,尤其是电信
zlfzy 2
zlfzy 2017-10-24 11:25:15 +08:00
广州,体验不咋的,电信时不时 BOOM,联通绕路北京
ninay 3
ninay 2017-10-25 20:26:56 +08:00
check http://zhujidot.com/
lzl119 4
lzl119 2017-10-25 23:20:47 +08:00
移动还可以,电信有点绕
yinjygg 5
yinjygg 2017-11-08 10:55:33 +08:00 via Android
买阿里云稳点
WangYouGX 6
WangYouGX 2018-01-25 09:34:18 +08:00 via Android
深圳,用 miami 的,能达到 40mbps,前提是开启 bbr,,加密方式是 chacha20
WangYouGX 7
WangYouGX 2018-01-25 09:35:05 +08:00 via Android
日本的我曾经用过,竟然没有 miami 稳,很容易被封 IP
wunonglin 8
wunonglin 2018-08-09 15:18:22 +08:00
已经废了,别考虑了
NELSONCHI 9
NELSONCHI 2018-08-10 09:33:37 +08:00
@wunonglin 这个时间节点,蛮尴尬的

怎么从理论上估计一台服务器的*大负载

有一台 2 核 4G 的阿里云服务器,不停向服务器建立 tcp 连接,并每秒发送 100 字节左右的包并在 1s 内返回 100 字节左右的包.

现在发现 1000 个连接读包有些已经超过 3s 了.

怎么根据服务器的配置去估计大概能抗住多少个这样的连接.

通过 tcp 的结构能估计出内存的*大负载,但是 CPU 的*大负载不知道怎么去估计,难道是去估计一个读写执行了多少个 CPU 指令然后通过嘛?

估计 负载 服务器 TCP6 条回复 • 2018-02-02 09:50:43 +08:00
MungBeanSoup 1
MungBeanSoup 2018-02-01 20:09:10 +08:00
用 Go 实现的
helloworld12 2
helloworld12 2018-02-01 20:39:04 +08:00
你这种情况, 可能是内存 gc 问题
helloworld12 3
helloworld12 2018-02-01 20:39:52 +08:00
可以用 pprof,trace 来分析
alcarl 4
alcarl 2018-02-01 21:25:56 +08:00 via Android
建立连接和收发数据本身并没有意义,还要加上业务负载才好评估,云上的鸡还要考虑带宽问题,100 字节的包 x1000 刚好 1mbps
MungBeanSoup 5
MungBeanSoup 2018-02-02 09:49:40 +08:00
@helloworld12

pprof 使用了,cpu 和 heap 基本都是 rpc 库的占*多
MungBeanSoup 6
MungBeanSoup 2018-02-02 09:50:43 +08:00
@alcarl 带宽是临时升级的 50Mbps,业务负载已经去掉了,现在就想知道怎么去评估一台服务器处理连接的能力.

iOS-NSLineBreakMode-lineBreakMode属性详解(UILabel省略号位置)

apple文档:

@property(nonatomic) NSLineBreakMode lineBreakMode; // default is NSLineBreakByTruncatingTail. used for single and multiple lines of text

用于多行和多行文本->字符截断类型(lineBreakMode //设置文字过长时的显示格式 )

// NSParagraphStyle
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, // Wrap at word boundaries, default
NSLineBreakByCharWrapping, // Wrap at character boundaries
NSLineBreakByClipping, // Simply clip
NSLineBreakByTruncatingHead, // Truncate at head of line: “…wxyz”
NSLineBreakByTruncatingTail, // Truncate at tail of line: “abcd…”
NSLineBreakByTruncatingMiddle // Truncate middle of line: “ab…yz”
} NS_ENUM_AVAILABLE(10_0, 6_0);

解释:
UILineBreakModeWordWrap = 0,
以单词为单位换行,以单词为单位截断。

UILineBreakModeCharacterWrap,
以字符为单位换行,以字符为单位截断。
->
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显
示,后面部分省略不显示。
label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内
容长度,后半部分被删除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字
以……方式省略,显示尾部文字内容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容
以……方式省略,显示头尾的文字内容。
label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容
以……方式省略,显示头的文字内容。
label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显
示,后面部分省略不显示。

精心总结了10个matplotlib绘图技巧,短小精悍,威力无穷!

快速且正确的显示中文

在matplotlib中,默认是没法显示中文的,原因很简单,默认使用的字体文件中不含中文。

当你搜索如何设置中文时,会有很多教程,我曾经也详细的介绍过3种方法,但是在有的电脑上折腾很久也搞不定,所以当你浪费了太多时间也没法解决,或者在一台陌生的设备上使用,需要快速的让matplotlib显示中文可以使用下面的代码。

  1. import matplotlib as mpl
  2. WRYH = mpl.font_manager.FontProperties(
  3.     fname=‘/Users/liuzaoqi/Desktop/可视化图鉴/font/WeiRuanYaHei-1.ttf’)
  4. # 微软雅黑字体
  5. plt.title(‘可视化图鉴’, fontproperties=WRYH)

很简单,既然修改默认的字体搞不定,那么就准备一个中文字体的路径,并在每次需要显示中文的组件(标题、注释、图例等)时,就强制指定使用这个字体。

这个办法一定可以让你图中的中文快速且正确显示出来,但是如果涉及中文的地方过多,还是需要在以后尝试一劳永逸的将中文字体添加到默认字体集中。

%title插图%num

提高分辨率

如果感觉默认生成的图形分辨率不够高,可以尝试修改 dpi 来提高分辨率,在matplotlib中可以一次性通过plt.rcParams修改,也可以在创建画布时为这一次的绘制修改,例如将分辨率调整至100

plt.figure(figsize = (7,6),dpi =100)

如果你的设备是配备Retina屏幕的mac,可以在jupyter notebook中,使用下面一行代码有效提高图像画质

%config InlineBackend.figure_format = 'retina'

%title插图%num

添加数学公式

有时我们在绘图时需要添加带有数学符号、公式的文字,如果直接使用默认的方法添加,虽然可以实现,但是不够美观,其实在matplotlib中也支持输出数学公式,就像下面的文字注释一样

%title插图%num只用在需要出现公式的位置使用r’你的公式’即可,比如plt.text(11000,0.45,r’拟合的曲线为$f(x) = 1.3x^2-6.54x+0.5$’)注意$$中是latex格式的表达方式,如果不熟悉的话需要自行搜索。

当然,也可以使用plt.rcParams[‘text.usetex’] = True设置默认tex输出,异曲同工,此处不多介绍。

%title插图%num

一行代码提高颜值

有时我们会觉得matplotlib默认制作出来的图片太朴素了,不够高级,其实开发者也内置了几十种主题让我们自己选择,只要使用plt.style.use(‘主题名’)指定主题即可,具体的支持主题我也整理出来的在《一行代码提高颜值,给你的matplotlib换个样式!》这篇文章中。

例如使用R语言中经典的ggplot主题

plt.style.use('ggplot')

%title插图%num另外一种提高图形颜值的代码是借用seaborn调色板修改配色,也是一行代码,通过sns.set_palette(xxxx)就能直接调整全局配色方案,下面是我比较喜欢的一种配色

  1. import seaborn as sns
  2. sns.set_palette(“pastel”8)

%title插图%num%title插图%num

调整图例位置

虽然matplotlib在生成图例时,默认会选择一个*合适的位置,但是有时依旧不能让人满意。

相信你知道我们可以使用loc = xxxx自己设置图例位置,但是对于xxxx每次都要查,看文字说明左上右下不如一张图来的快,下面是我们可以选择的9个位置,可以根据自己的需要进行选择。

%title插图%num%title插图%num

获得当前绘图区域

在原理篇文章中,我曾经说到如果想要获得更精细的调整,就需要使用ax.xxxx进行调整,但有时我们开始没有使用fig,ax=plt.subplots(figsize = (6,4),dpi=100)来定义ax,在需要使用时重新开始并定义是不推荐的,这时可以使用

ax = plt.gca()

获得当前Figure中的Axes,并继续正常使用ax.xxxx调整

%title插图%num

隐藏坐标轴

对于有些图形我们希望通过隐藏坐标轴来显得更加美观,这时可以ax.spines获取对应位置的的Spine对象,之后便可以任意修改是否显示与显示颜色,比如让右边和上面的线消失或者修改颜色

  1. ax.spines[‘right’].set_color(‘None’)
  2. ax.spines[‘top’].set_color(‘None’)

%title插图%num

  1. ax.spines[‘right’].set_color(‘deeppink’)
  2. ax.spines[‘top’].set_color(‘blue’)
  3. ax.spines[‘bottom’].set_color(‘green’)
  4. ax.spines[‘left’].set_color(‘red’)

%title插图%num%title插图%num

指定坐标轴刻度

如果对于默认生成的坐标轴刻度不满意,我们可以使用plt.yticks([])来自定义刻度,注意需要传入一个你想要的刻度list,并且长度需要和刻度对应,例如下方代码

  1. label = [‘2月7日’,‘3月25日’,‘5月13日’,‘7月2日’,‘8月21日’,’10月10日’,’11月29日’,’12月31日’]
  2. plt.yticks(range(0,400,50), labels=label,rotation = 40,color = ‘black’)

%title插图%num当然如果label是空的话,可以结合上一个技巧把对应的坐标轴干掉,彻底消失

plt.yticks([])

%title插图%num

添加自定义图片

有时我们希望在对数据可视化后添加一些图片来丰富元素,虽然可以使用ps添加,但其实matplotlib也可以独立完成,总共分两步:打开图片——添加图片

首先导入相关的包并根据图片路径导入

  1. from matplotlib.offsetbox import (OffsetImage,AnnotationBbox)
  2. import matplotlib.image as mpimg
  3. arr_img = mpimg.imread(‘你的图片位置’)

接着就可以根据坐标将图片添加到指定位置,详细的设置可以参考官方文档,下面的代码可以拿走就用,根据效果调整坐标即可

  1. imagebox = OffsetImage(arr_img, zoom=0.2)
  2. ab = AnnotationBbox(imagebox, [0.15,0.5],
  3.                     xybox=(170.-50.),
  4.                     xycoords=‘data’,
  5.                     boxcoords=“offset points”,
  6.                     pad=0.5
  7.                     )
  8. ax.add_artist(ab)

%title插图%num

添加表格

有时只用图片很难传递更多的信息,幸运的是,在matplotlib中也可以使用plt.table来为图片添加一张与之对应的表格,只需要将你的数据按照指定格式传入即可。

下面是我在官方文档示例的基础上,添加渐变效果的表格

  1. data = [[ 66386174296,  75131577908,  32015],
  2.         [ 58230381139,  78045,  99308160454],
  3.         [ 89135,  80552152558497981603535],
  4.         [ 78415,  81858150656193263,  69638],
  5.         [139361331509343164781380,  52269]]
  6. columns = (‘Freeze’‘Wind’‘Flood’‘Quake’‘Hail’)
  7. rows = [‘%d year’ % x for x in (1005020105)]
  8. values = np.arange(02500500)
  9. value_increment = 1000
  10. colors = plt.cm.BuPu(np.linspace(00.5len(rows)))
  11. n_rows = len(data)
  12. index = np.arange(len(columns)) + 0.3
  13. bar_width = 0.4
  14. plt.figure(figsize = (8,5),dpi =100)
  15. y_offset = np.zeros(len(columns))
  16. cell_text = []
  17. for row in range(n_rows):
  18.     plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
  19.     y_offset = y_offset + data[row]
  20.     cell_text.append([‘%1.1f’ % (x / 1000.0for x in y_offset])
  21. colors = colors[::-1]
  22. cell_text.reverse()
  23. the_table = plt.table(cellText=cell_text,
  24.                       rowLabels=rows,
  25.                       rowColours=colors,
  26.                       colLabels=columns,
  27.                       loc=‘bottom’
  28.                      ,cellColours=plt.cm.Blues(x))
  29. plt.subplots_adjust(left=0.2, bottom=0.2)
  30. plt.ylabel(“Loss in ${0}’s”.format(value_increment))
  31. plt.yticks(values * value_increment, [‘%d’ % val for val in values])
  32. plt.xticks([])
  33. plt.title(‘Loss by Disaster’)
  34. plt.show()

%title插图%num以上就是本文和大家总结的10个matplotlib小技巧,在未来的文章中我会继续分享相关知识,也希望大家可以在使用一些数据可视化工具时可以不断总结,不断进步。

  1. ☞可供货华为!ARM 十年来首次发布*新架构 Armv9☞多出20倍?Android 收集用户数据量远超 iPhone
  2. ☞将 Linux 移植到 M1 Mac 真的太难了!%title插图%num

iOS 代码块在程序中只执行一次

//开启定位的同时展示用户可行驶范围
static dispatch_once_t disOnce;
dispatch_once(&disOnce, ^ {
//根据电量判断展示的圆的半径
CGFloat radius = 1500.0f;
_circle = [MACircle circleWithCenterCoordinate:CLLocationCoordinate2DMake(self.mapView.userLocation.location.coordinate.latitude, self.mapView.userLocation.location.coordinate.longitude) radius:radius];

//根据半径判断缩放级别
[_mapView setZoomLevel:[self zoomlevelAccordingRadius:radius] animated:YES];
//在地图上添加圆
[_mapView addOverlay: _circle];
});

iOS “_OBJC_CLASS_$_JPUSHService”, referenced from: 解决办法

大概就是:
1. 检查Link Binary With Libraries是否缺少相应地依赖类库
2. 查看Build Settings下的Library Search Paths的引入文件是否是相对路径,把路径不对的或者不存在的都进行清除
3. 更新SDK, 替代原有方法, 代码错误排查
这些并没有解决JPUSHService *光推送 运行时报错 “OBJC_CLASS$_JPUSHService”, referenced from:

解决办法:
将运行环境从release切换到debug即可( 忘记切换环境了 -.- )

%title插图%num

不容错过的 15 个 Linux 实用技巧

使用Linux*酷的事情之一就是随着时间的推移,你可以不断获得新的知识。每天,你都可能会遇到一个新的实用工具,即使是这样,也不可能事事皆知。无论你有多少经验,可能总会有更多东西去学习。本文总结了15个不常见的使用小技巧,随着本文来了解一下吧。

作者 | 肖邦       责编 | 欧阳姝黎

熟悉 Linux 系统的同学都知道,它高效主要体现在命令行。通过命令行,可以将很多简单的命令,通过自由的组合,得到非常强大的功能。

命令行也就意味着可以自动化,自动化会使你的工作更高效,释放很多手工操作,让你有更多的时间去做更有意义的事情。

这篇文章,会分享一些非常实用小技巧,希望能够帮助你提高工作效率,学完就能够用得上!

%title插图%num

%title插图%num

快速清空文件的方法

快速清空一个文件,有 N 种方法,我比较喜欢下边这种,因为它*短

$ > access.log

不过瘾?好吧,我也顺便总结下,其它几种*常见的清空文件的方法

  • : > access.log
  • true > access.log
  • cat /dev/null > access.log
  • echo -n “” > access.log
  • echo > access.log
  • truncate -s 0 access.log

简单解释下, : 在 shell 中是一个内置命令,表示 no-op,大概就是空语句的意思,所以 : 的那个用法,就是执行命令后,什么都没有输出,将空内容覆盖到文件。

%title插图%num

快速生成大文件

有时候,在 Linux 上,我们需要一个大文件,用于测试上传或下载的速度,通过 dd 命令可以快速生成一个大文件

$ dd if=/dev/zero of=file.img bs=1M count=1024

上述命令,生成一个文件名为 file.img 大小为 1G 的文件。

%title插图%num

安全擦除硬盘数据

介绍一种擦除硬盘数据的方法,高效,安全。可以通过 dd 命令,轻松实现:

$ dd if=/dev/urandom of=/dev/sda

使用 /dev/urandom 生成随机数据,将生成的数据写入 sda 硬盘中,相当于安全的擦除了硬盘数据。

当年陈老师,如果学会了这条命令,可能也不会有艳兆门事件了。

%title插图%num

快速制作系统盘

在 Linux 下制作系统盘,老毛桃神么工具都弱爆了,直接一条命令搞定:

$ dd if=ubuntu-server-amd64.iso of=/dev/sdb

哈哈,是不是很爽,sdb 可以 U 盘,也可以是普通硬盘

%title插图%num

查看某个进程的运行时间

可能,大部分同学只会使用 ps aux,其实可以通过 -o 参数,指定只显示具体的某个字段,会得到更清晰的结果。

  1. $ ps -p 10167 -o etimes,etime
  2. ELAPSED     ELAPSED
  3. 1712055 19-19:34:15

通过 etime 获取该进程的运行时间,可以很直观地看到,进程运行了 19 天

同样,可以通过 -o 指定 rss 可以只获取该进程的内存信息。

  1. $ ps -p 10167 -o rss
  2.   RSS
  3.  2180

%title插图%num

动态实时查看日志

通过 tail 命令 -f 选项,可以动态地监控日志文件的变化,非常实用

$ tail -f test.log

如果想在日志中出现 Failed 等信息时立刻停止 tail 监控,可以通过如下命令来实现:

$ tail -f test.log | sed '/Failed/ q'

%title插图%num

时间戳的快速转换

时间操作,对程序员来说就是家常便饭。有时候希望能够将时间戳,转换为日期时间,在 Linux 命令行上,也可以快速的进行转换:

  1. $ date -d@1234567890 +“%Y-%m-%d %H:%M:%S”
  2. 2009-02-14 07:31:30

当然,也可以在命令行上,查看当前的时间戳

  1. $ date +%s
  2. 1617514141

%title插图%num

优雅的计算程序运行时间

在 Linux 下,可以通过 time 命令,很容易获取程序的运行时间:

  1. $ time ./test
  2. real    0m1.003s
  3. user    0m0.000s
  4. sys     0m0.000s

可以看到,程序的运行时间为: 1.003s。细心的同学,会看到 real 貌似不等于 user + sys,而且还远远大于,这是怎么回事呢?

先来解释下这三个参数的含义:

  • real:表示的钟表时间,也就是从程序执行到结束花费的时间;
  • user:表示运行期间,cpu 在用户空间所消耗的时间;
  • sys:表示运行期间,cpu 在内核空间所消耗的时间;

由于 user 和 sys 只统计 cpu 消耗的时间,程序运行期间会调用 sleep 发生阻塞,也可能会等待网络或磁盘 IO,都会消耗大量时间。因此对于类似情况,real 的值就会大于其它两项之和。

另外,也会遇到 real 远远小于 user + sys 的场景,这是什么鬼情况?

这个更好理解,如果程序在多个 cpu 上并行,那么 user 和 sys 统计时间是多个 cpu 时间,实际消耗时间 real 很可能就比其它两个之和要小了

%title插图%num

命令行查看ascii码

我们在开发过程中,通常需要查看 ascii 码,通过 Linux 命令行就可以轻松查看,而不用去 Google 或 Baidu

$ man ascii

%title插图%num

优雅的删除乱码的文件

在 Linux 系统中,会经常碰到名称乱码的文件。想要删除它,却无法通过键盘输入名字,有时候复制粘贴乱码名称,终端可能识别不了,该怎么办?

不用担心,下边来展示下 find 是如何优雅的解决问题的。

  1. $ ls  -i
  2. 138957 a.txt  138959 T.txt  132395 ڹ��.txt
  3. $ find . -inum 132395 -exec rm {} \;

命令中,-inum 指定的是文件的 inode 号,它是系统中每个文件对应的唯一编号,find 通过编号找到后,执行删除操作。

%title插图%num

Linux上获取你的公网IP地址

在办公或家庭环境,我们的虚拟机或服务器上配置的通常是内网 IP 地址,我们如何知道,在与外网通信时,我们的公网出口 IP 是神马呢?

这个在 Linux 上非常简单,一条命令搞定

  1. $ curl ip.sb
  2. $ curl ifconfig.me

上述两条命令都可以

%title插图%num

如何批量下载网页资源

有时,同事会通过网页的形式分享文件下载链接,在 Linux 系统,通过 wget 命令可以轻松下载,而不用写脚本或爬虫

  1. $ wget -r -nd -np –accept=pdf http://fast.dpdk.org/doc/pdf-guides/
  2. # –accept:选项指定资源类型格式 pdf

%title插图%num

历史命令使用技巧

分享几个历史命令的使用技巧,能够提高你的工作效率。

  • !!:重复执行上条命令;
  • !N:重复执行 history 历史中第 N 条命令,N 可以通过 history 查看;
  • !pw:重复执行*近一次,以pw开头的历史命令,这个非常有用,小编使用非常高频;
  • !$:表示*近一次命令的*后一个参数;

猜测大部分同学没用过 !$,这里简单举个例子,让你感受一下它的高效用法

  1. $ vim /root/sniffer/src/main.c
  2. $ mv !$ !$.bak
  3. # 相当于
  4. $ mv /root/sniffer/src/main.c /root/sniffer/src/main.c.bak

当前工作目录是 root,想把 main.c 改为 main.c.bak。正常情况你可能需要敲 2 遍包含 main.c 的长参数,当然你也可能会选择直接复制粘贴。

而我通过使用 !$ 变量,可以很轻松优雅的实现改名,是不是很 hacker 呢?

%title插图%num

快速搜索历史命令

在 Linux 下经常会敲很多的命令,我们要怎么快速查找并执行历史命令呢?

通过上下键来翻看历史命令,No No No,可以通过执行 Ctrl + r,然后键入要所搜索的命令关键词,进行搜索,回车就可以执行,非常高效。

%title插图%num

真正的黑客不能忽略技巧

*后,再分享一个真正的黑客不能忽略技巧。我们在所要执行的命令前,加一个空格,那这条命令就不会被 history 保存到历史记录

有时候,执行的命令中包含敏感信息,这个小技巧就显得非常实用了,你也不会再因为忘记执行 history -c 而烦恼了。

矩阵相加

矩阵相加
**题目:**计算两个矩阵相加。
1
**程序分析:**创建一个新的矩阵,使用 for 迭代并取出 X 和 Y 矩阵中对应位置的值,相加后放到新矩阵的对应位置中。
1
X = [[12,7,3],
    [4 ,5,6],
    [7 ,8,9]]
Y = [[5,8,1],
    [6,7,3],
    [4,5,9]]
res=[[0,0,0],
    [0,0,0],
    [0,0,0]]
for i in range(len(res)):
    for j in range(len(res[0])):
        res[i][j]=X[i][j]+Y[i][j]
print(res)