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)

iOS 代码取得到 Storyboard和XIB控件,控制器

为了追求开发效率, 更直观的界面适配,大多人都采用了Storyboard和XIB控件来开发,

结合代码的话, 如何在代码中取得Storyboard中的VC或者控件

%title插图%num
有三种方法:

%title插图%num
// *种方法 通过storyBord的名字 取得SB 再通过通过SB调用instantiateInitialViewController
UIStoryboard *stroyB = [UIStoryboard storyboardWithName:@”Main” bundle:nil];
NavViewController *naVC = [stroyB instantiateInitialViewController];

// 由storyboard根据myView的storyBoardID来获取我们要切换的视图
ViewController *VC = [stroyB instantiateViewControllerWithIdentifier:@”myView”];
NSLog(@”%@”, [naVC class]);

// 第二种方法 创建XIB文件 通过[NSBundle mainBundle] loadNib 加载nib文件取得
ViewController *viewVC = [[[NSBundle mainBundle] loadNibNamed:@”ViewController” owner:self options:nil] firstObject];
NSLog(@”%@”, [viewVC class]);

// 第三种方法 alloc initWithNibName 通过NIB名字 初始化
ViewController *viewVC = [[ViewController alloc] initWithNibName:@”ViewController” bundle:nil];
NSLog(@”%@”, [viewVC class]);

打破循环

打破循环
**题目:**求输入数字的平方,如果平方运算后小于 50 则退出。
1
while True:
    try:
        n=float(input(‘输入一个数字:’))
    except:
        print(‘输入错误’)
        continue
    dn=n**2
    print(‘其平方为:’,dn)
    if dn<50:
        print(‘平方小于50,退出’)
        break

伟大的 v 站,千万级的日 api 调用量,需要怎么配置云服务器

我搞了个小程序,上周五的时候,用户只有几百。 今天日打开次数达到了一百多万,api 调用量 200 多万,数据库数据几个表合计上百万条。 今天下午的时候,云服务商没承受住压力,宕机了。 其实昨天晚上我就在筹备,备个腾讯云的版本出来,但是昨天的访问量 30 万,我想,不至于吧,明天会上百万? 而且我对服务器的了解不是很多,一直在搞前端和移动端的工作,参与的后端接口开发,只是接口开发,没碰过部署及运维之类的工作。

现在恨只恨自己技术太渣,这样的量级该怎么配置服务器都不知道。 希望大家给个建议。

现在的量级:今天是两百万级别的 api 调用量,预计本周内达到千万级,顶点在哪儿我不知道。

对于该如何配置服务器,希望大家给个建议。

拜托了!

API 服务器 量级 调用8 条回复 • 2018-04-27 17:33:58 +08:00
subliyou 1
subliyou 2018-01-17 22:24:52 +08:00
好吧,沉了。。。
GooMS 2
GooMS 2018-01-17 23:26:01 +08:00 via Android
单纯的请求数没有意义,要根据业务取舍调整。不过大体的手段也就那几种,简单到上缓存。
CEBBCAT 3
CEBBCAT 2018-01-17 23:38:53 +08:00 via Android
哇噻,楼主这是什么小程序?你这 API 大体是干嘛的?是 IO 不够吗?
subliyou 4
subliyou 2018-01-18 16:23:09 +08:00
已经委托云服务商在解决了。他们比我专业,希望可以挺过去。
@GooMS
@CEBBCAT
whx20202 5
whx20202 2018-01-19 14:18:26 +08:00
@subliyou 可以性能分析一下瓶颈在哪里
gomars 6
gomars 2018-02-01 09:08:53 +08:00
是什么小程序这么火
miqiqi 7
miqiqi 2018-02-17 10:32:10 +08:00
https://s1.ax1x.com/2018/01/21/pRh5VA.jpg
顶住了
iamdqncoder 8
iamdqncoder 2018-04-27 17:33:58 +08:00 via Android
什么小程序。。这么恐怖的吗。。

服务器隐藏 IP?

题主才刚毕业,一直做的工作也基本是缝缝补补什么的,可能确实小白了

这两天发现原来在某些情况下服务器需要隐藏真实的 IP,只暴露域名来提供服务.似乎在小网站或者个人网站这种情况比较多.

这个就觉得有点奇怪了,一方面平时用到的网站,比如 google, github 等等似乎不会刻意隐藏他们的服务器的真实 IP,虽然可能有一些其他的限制比如禁 ping 或者限制端口;另一方面,DNS 服务不是会将域名转化为 IP 的吗,这样不就暴露了 IP 了吗?

所以,隐藏真实 IP 是有什么用处,而又是怎么实现的呢?

望不吝赐教

隐藏 服务器 域名 题主22 条回复 • 2019-11-24 23:53:22 +08:00
ywgx 1
ywgx 2017-07-15 16:24:45 +08:00
这里有文章一篇,可以解惑 xabcloud.com/#/live

一句话:隐藏真实 IP,防止被 DDoS
jishu541464750 2
jishu541464750 2017-07-15 16:28:48 +08:00 via iPhone
使用 cdn 也可以
Tink 3
Tink 2017-07-15 16:39:42 +08:00 via iPhone
cdn 的作用就是这俩问题的答案
y1261474584 4
y1261474584 2017-07-15 16:48:12 +08:00 via Android
google github 这些都是大公司,不怕 DDoS,不用刻意隐藏 IP
mornlight 5
mornlight 2017-07-15 16:51:31 +08:00 via iPhone
没 IP 怎么建立链接怎么发送数据包呢。
所谓的隐藏 IP 就是拿另一个不怕正面刚的 IP 替代,真的 IP 放后面藏着。
bin456789 6
bin456789 2017-07-15 16:56:20 +08:00
*简单的,搞个全站 cdn
cloudflare / 百度云加速,点几下就完成了
eloah 7
eloah 2017-07-15 17:00:32 +08:00
@jishu541464750
@Tink
看了一下 cdn,可是还有一些不明白的,望解答
1. cdn 主要用于处理静态内容,那网站上的动态内容如何处理呢
2. cdn 是通过 dns 查询时改变指向 ip 达到隐藏真实 ip 的目的的,这个可以算是中间人攻击的一种?
eloah 8
eloah 2017-07-15 17:02:03 +08:00
@ywgx
是的,我明白目的,但是不太清楚原理
因为没有 IP 就没有办法建立链接,只通过域名服务很奇怪
liuminghao233 9
liuminghao233 2017-07-15 17:02:38 +08:00 via iPhone
你说的真实 ip 位置就是你网站内容放的服务器

假 ip 就是另一个 ip,用来代理真实 ip 的内容,只代理 443 80 端口,这样真实 ip 就是安全的。

另外你怎么知道 google github 用 dns 解析出来的 ip 是真实 ip
eloah 10
eloah 2017-07-15 17:02:49 +08:00
@bin456789
那如果是动态内容应该怎么处理呢
噗,其实是想弄清楚一下原理

xenme 12
xenme 2017-07-15 17:05:17 +08:00
@eloah
简单理解:
有个中间人帮你处理所有用户请求,然后转发给藏在后面的真是服务器。
而中间的人是你放的,怎么叫中间人攻击呢?

要是中间这个是攻击的人放的,就是中间人攻击。
liuminghao233 13
liuminghao233 2017-07-15 17:06:13 +08:00 via iPhone
其实就是一个反向代理
liuminghao233 14
liuminghao233 2017-07-15 17:08:13 +08:00 via iPhone
@xenme dns 会被运营商劫持,比如说移动内网延时 1ms 版的 8.8.8.8,这个是可以搞事情的。
bin456789 15
bin456789 2017-07-15 17:56:02 +08:00
@eloah 动态也是没问题的,本身你的程序可以指定缓不缓存,cdn 的管理界面也可以设置
或者索性设置只缓存静态内容 jpg css js…
wy315700 16
wy315700 2017-07-15 17:56:36 +08:00
@eloah cdn 也有动态的
Tink 17
Tink 2017-07-15 18:06:38 +08:00 via iPhone
@eloah 全站 cdn 的话就是动态静态都隐藏
spartda 18
spartda 2017-08-03 12:06:00 +08:00
我告诉你方法吧,使用加速乐 CDN,利用加速乐 CDN 提供的 DNS 地址或 CNAME 解析来达到隐藏源站服务器 IP 地址的效果。

把网站的静态资源、动态资源全部加载到 CDN 节点进行缓存,用户访问的时候是先经过节点来访问,动态的内容经过节点过滤再返回源站服务器,再把返回服务器得到的内容发送给真实用户。
togodo 19
togodo 2017-09-13 22:28:18 +08:00
百度云减速
yingfengi 20
yingfengi 2017-11-09 08:25:12 +08:00 via Android
怕被 D,所以躲在 CDN 后面
no13bus 21
no13bus 2019-11-24 20:16:49 +08:00
@bin456789 全站 cdn 是不是意思是所有的子域名和主域名都用 cf ?以及在 path rule 里面配置 *.a.com/* 的 cache level 走 standard?
bin456789 22
bin456789 2019-11-24 23:53:22 +08:00 ❤️ 1
@no13bus *个问题是
第二个问题其实不用配置, 因为 Caching 页面 cache level 默认就是 standard,而且不缓存 html,不用改动就够用了
Page Rules 里面的 cache level 只是特殊需求

Gen8 想扩展硬盘,有什么推荐的方案?

Gen8 的 4 个硬盘位全都插满了,想扩展有什么好的方案?

gen8 硬盘 扩展 方案10 条回复 • 2019-10-18 14:02:18 +08:00
ys0290 1
ys0290 2017-11-10 12:22:17 +08:00 via iPhone
pci 转硬盘接口,在里面绑四个 2.5 硬盘
meanmachine 2
meanmachine 2017-11-10 12:40:49 +08:00 via Android
买个 p222 外置硬盘柜?
dejavu 3
dejavu 2017-11-10 13:04:44 +08:00
这个牛逼,还有位置放置 4 个 2.5 硬盘?
momocraft 4
momocraft 2017-11-10 13:08:02 +08:00
见过有人在 gen7 塞 6 盘,不知道 gen8 可不可以
wolf5 5
wolf5 2017-11-10 13:17:13 +08:00
里面塞得下 4 块 2.5 ?
太牛了!
Terry05 6
Terry05 2017-11-10 14:01:38 +08:00
@meanmachine 这是啥?
redsonic 7
redsonic 2017-11-11 01:55:48 +08:00
@Terry05 类似这个 https://item.taobao.com/item.htm?spm=a230r.1.14.96.560ae4c8jrBkI1&id=14140581026 ,噪音是个大问题。
powergx 8
powergx 2017-11-13 00:41:03 +08:00
我再买了一台 gen8 , 用 sas 外置线把笼子接在一台上. 另外一台机器内贴了两个 ssd 当 esxi 服务器.
Terry05 9
Terry05 2017-12-16 00:24:58 +08:00
@redsonic 在家里摆这个太夸张了
yytbob 10
yytbob 2019-10-18 14:02:18 +08:00
@meanmachine 同意 @Terry05 在家用可能有点夸张,噪音会不会很大?

手机 wifi 断连问题

买了个 Sony Xperia1 iii
使用的过程中发现 wifi 时不时会断
不是断流( wifi 连着但是上不去网),是直接 wifi 显示断开变成了 5G
手机的 wifi 设置里所有选项都试过了都不起作用
重置网络也试过了 没用
手机选项里如果开启自动连接 会重连 但是会有个几秒的网络切换时间

不知道是不是跟路由器有关系,但是家里的其他设备都没有这个问题
我用的 OpenWRT 的软路由加上 Linksys 的 MX5300 AP 模式
每次断线重连之后在路由器上可以看到 DHCP 的续期都更新了
有个细节是这个手机是家里*台 wifi6 设备
手机断连重连之后有的时候显示是 wifi6 有的时候显示是 wifi5

有没有机友碰到过类似问题?给个尝试的思路
谢谢

第 1 条附言  ·  1 天前

换了个华为的 AP 不断了..
应该是 MX5300 的 wifi6 的问题

14 条回复    2021-08-01 11:59:35 +08:00

sevenyangdx
    1

sevenyangdx   11 天前

之前路由器开 2.4/5G 同名时出现过,不知道是不是一个原因。
ldz
    2

ldz   11 天前

@sevenyangdx
试过把 2.4/5G 分成两个不同的 SSID
还是会断
Avedge
    3

Avedge   11 天前

iPhone12,Linksys MX5300,也出现过相同症状
bclerdx
    4

bclerdx   11 天前 via Android

你看看是不是把 wifi 高级选项内的智能连接打开呢。可能手机判断你无线网质量不好,转为移动数据服务了。
ldz
    5

ldz   10 天前

@Avedge 后来咋解决的啊?
ldz
    6

ldz   10 天前

@bclerdx 试过了 关掉还是一样断
bclerdx
    7

bclerdx   10 天前 via Android

@ldz 是国行的么?
ldz
    8

ldz   10 天前

@bclerdx 是啊
还怀疑是路由器上 ssr 插件的问题
关掉*一样断

wifi 设置里的网络评分服务提供商也从谷歌换成了无
试了也不行

Avedge
    9

Avedge   10 天前

@ldz 没解决,感觉是路由器的问题
liyunbo
    10

liyunbo   10 天前

IPHONE12,换了几个路由器和光猫(现在华为 hg8145c5 和华为 TC7120 ( wifi6 )),无果,凑合用了,等待大佬能解决。

光猫从华为 hg8120c,换中兴 f650,再换现在的 hg8145c5,路由器从原来的华为 ws831,换 tpac1900,再换到现在的华为 TC7120,故障一样,有时网特慢,有时又正常。

家里有个荣耀 10,一直正常。

家里还有苹果 6,正常。

ipadmini 也有时抽风。但是不如 iphone12 出现的多,也许手机用的多吧。

haokaixin
    11

haokaixin   8 天前

好像是要 adb 改验证服务器。。但是。。目前这个电脑没有 usbc 接口,等回家试试看把,sony 连电脑都挺难的。。
ldz
    12

ldz   8 天前 via Android

@haokaixin 具体怎么操作?有教程不? adb 我倒是连上了
haokaixin
    13

haokaixin   7 天前

@ldz 搜索 adb wifi 就能看见很多
你用啥连的无线还是数据线?原装数据线嘛?
ldz
    14

ldz   1 天前

@haokaixin 我用的一根非原装的线连上的电脑