Onelong

分享知识,与你一起进步......
RSS icon Home icon
  • 一些经验小结

    post by onelong / 2016-7-29 19:54 Friday [工作]
    1、Android网络使用了我修改的基于okhttp的volley,在以往的开发都是用httpclient,但是这次改了,一路过来感觉性能和效率都不错,基于队列的请求,在并发方面得到了很好的控制,也就是不容易崩溃。得益于volley的单例,在退出页面的时候及时的关闭无用的请求,在响应上体验更加好,同时也可以减轻服务器因为误操作的负担,iOS也封装了类似东西。
    2、数据传输全程加密,虽然加密算法简单粗暴,至少不是明文。所以接口都用了数字指纹检验,保证数据在传输过程中不被篡改。
    3、本地敏感数据采用AES加密,本来我修改了一套c++的加密算法,在android5上容易出现崩溃,后来因为偶尔崩溃而又没有测试手机,放弃了。c++的加密虽然也是使用AES的cbc模式,但是结合app签名+手机的硬件信息+时间随机数,进行敏感数据加密,保证每次加密密文都不一样。没有做失效控制。
    4、留下的遗憾,没有验证https,没有采用随机AES加密的方式。随机加密安全性会更高,希望下次有机会再用。
    5、客户端本地存储密码,session过时后,下次请求自动重新登录。本地存储密码是不安全的,虽然加密了,理论上应该存储token,cookie之类的东西。
    6、iOS本地敏感数据采用keychain+AES存储,我知道在还有更高级别的存储方式,但是没有使用。
    7、iOS网络采用AFN+json,后面还配置过AFN的并发数,优化性能。
    8、客户端接口都是json2json的方式,所有服务器通讯都有日志,服务器和服务器之间也有日志,方便以后排查异常。
    9、客户端本地采用bugly收集异常崩溃信息,同时作为测试发布平台。
    10、客户端提交较多的硬件信息到服务端,方便做用户统计,但是没有统计用户的行为,因为当前项目并不是大众化的产品,所以没有接入相关的统计sdk。
    11、 自动化测试,这次没有搞,原因比较简单,因为我们的key都是用中文的,Apple的自动化测试工具支持得不好,所以就放弃了。希望下次有机会去做这方面的尝试,包括自动发布方向的东西。很多人说到热更新,我还是保留了观望的态度,理论上这些都是可以尝试的,对于一个用户量一般的app,没有必要折腾,毕竟头发掉了,有时候再也长不出来了。 

  • 更简单的兼职赚钱-ASO

    post by onelong / 2016-5-14 21:41 Saturday [业界]

    什么是ASO?ASO(App Store Optimization)就是提升你APP在各类APP电子市场排行榜和搜索结果排名的过程。类似移动APP的SEO优化。所以是个app推广都希望在苹果商店排前面,但是怎样做的呢?很自然就衍生了很多刷单的平台,这两周体验了一下,感觉收益还是不错的。苹果商店想自动模拟刷单的确比较难,所以衍生了很多刷单的平台,人工去刷单。最近体验的两个平台,感觉收益还不错的。
    一般是怎样做的呢?平台有特定的任务,例如下载使用3分钟,然后就可以得到收益了,自己只要有台iPhone手机就可以了,不需要别的成本。再例如下面的任务:

    阅读全文>>

  • 数据库集群

    post by onelong / 2016-5-1 17:48 Sunday [数据库]

    数据库相关的东西,是最近想写的最后一个总结了。说到大数据,数据库集群,都是比较蛋疼的话题。动不动就要用Hadoop,spark,事实上mysql还是可以比较轻松支持起亿级数据的。mongodb在即时通讯上面很流行,因为有它的特殊性,node.js+mongodb是绝配,上次测session的持久化,数据比用redis还快,太神奇了。对于Hadoop,spark其实我没什么可说的,因为没有使用场景,但是更多人建议使用spark,其实Hadoop和spark的使用场景是有差异的,具体可以百度了解一下。对于mysql,之前在群里聊过,一般的架构就是读写分离,多组主从,分库分表,做好监控。数据库常用的方案:主从模式,双主模式,NDB Cluster等。无论是主从还是双主,需要客户端做好负载均衡。NDB Cluster 是个很好的方向但商业案例不多。具体 [https://www.zhihu.com/question/21307639](https://www.zhihu.com/question/21307639) 。目前主从模式,双主模式还是比较简单易行的。通过读写分离,读的瓶颈可以得到缓解,但是写的瓶颈更加明显了,该如何解决写的瓶颈呢?大多数人提出的方案就是分库分表,但是分库分表很可能影响业务逻辑,比较蛋疼。当当开源了一个sharding-jdbc似乎挺好的解决这个问题,但是性能如何呢,我没有时间做测试。还有一个据说很牛逼的mycat,没怎么了解。如果引入cache(redis,memcached)做缓冲的,高并发需要解决很多一致性的问题,这个很心塞。简单写这个,没有什么深入的内容,只是小结一下别人生产环境中可用的方案 ,帮助我们在选择的时候做决定的。具体真的要深入的话,水比较深,交给专业的数据库工程师就好了。

  • 傻傻的坚持

    post by onelong / 2016-5-1 17:47 Sunday [工作]

    在学校写了2年多的html+css+js,毕业后的一直从事android和iOS开发,尽管过程也简单的写过php和数据库,Linux环境的网络编程和多核cpu编程还买了好几本书,那些年一直在看和一直在demo,但是依旧比较遗憾的是因为不会debug没有写出什么像样的东西,然后今年计划学习一下后台和数据库,将这么多年零散的知识堆在一起。突然回首,这几年变懒了,总结少了,很东西都在反复着学,学完又忘记了,忘记了又在学。很多本行人的想法都是觉得技术没什么,是自己最强项的,甚至认为技术学那么也没什么用,又不能当老板,的确是这样的。如果所有的东西都奔着钱去,最好是转行做生意。钱没有人会嫌多,但是还是要保留自己最纯真的兴趣爱好,人这一辈子,要把握的东西很多很多,但是一定要把握最重要的东西-开心快乐。在接触后台和数据库的过程,我也尝试了解运维,测试,产品相关的东西,说到这里,有很多人会说,你想全栈么?我真的没想过那么伟大的事情,而且精力也十分有限,我努力去了解是为了明白整个流程,没有想过样样深入。对于运维,师兄是这样说的,现在都是云服务器,基本不需要学。虽然门槛变低了,但是还是需要了解的,例如nginx的各种指标,tomcat的jmx,CPU负载等东西的,对于测试,首先要知道的概念:功能测试,压力测试,体验测试。了解测试其实是很有用的,为什么这样说呢,因为测试是帮助程序员找出问题,从而写出更稳定,更高效的程序。懂得测试,至少在选择方案的时候可以做到心中有数,少踩点坑。对于产品和市场,这个是很广的话题,想学深代价比较大,也是我当前最不愿意做的事情。但是还是希望在成长的路上慢慢积累,目前很多产品都是找现有的app参考,然后东拼西凑弄一个网站的原型出来,整个排版根本不考虑手机的特殊性,甚至有些产品连交互都不管。努力了解整个流程主要意义是努力让自己有能力把控整一个项目的全程。有时候也会有人质疑,花那么多心思搞技术,还不如想想别的门路,找一份可以干一辈子的事业,我觉得是个人都会想这个问题,但是在当下没有更好的事情可以做的空仓期,我还是选择了干一行爱一行。有时候梦想是金钱和名利无关的,就是一种想坚持下去的力量。在中国合伙人里面有句话:“什么是梦想,梦想就是一种让你感到坚持就是幸福的东西。”

  • 移动案场app

    post by onelong / 2016-4-23 15:19 Saturday [工作]

    自己作为项目主管开发的第一款产品。经历了6个月,终于解决尾声了,过程中收获很多。在管理上,监控项目进度上,还有在技术上,都得到不同程度的收益。整体规划很重要,抓细节也很重要。移动案场app分iOS和android两个客户端,下面看看iOS的截图吧。

    阅读全文>>

  • 怎样快速学习

    post by onelong / 2016-4-20 14:19 Wednesday [工作]

     最近有读计算机的孩童告诉我,选嵌入式方向,搞智能硬件去了,就我个人的看法,选择自己喜欢的,然后咬紧牙关去学习就好了。曾经在一个服务器开发群里面,突然有人问题,怎样给读计算机专业的学生建议。我当时说得很恐怖,“刻苦学习,卧薪尝胆,写它几十万行代码,看几百万行代码,有问题的时候吃饭在想,睡觉也在想”,然后有人评论:“何苦呢?”,我想一想也是的,现在做技术的,随便吹一下就可以找到比较好的工作了,大学就该好好享受生活,做些证明青春的傻逼事情。像去年iOS绝对是高薪呀,培训一下,弄个假简历,马上15k了,而今年呢?好多培训出来的找不到工作。以前做网站的,你会用表格弄一个静态页面就很牛逼了,工作任你选,后来人家要求会asp技术了,但现在要你会手写html+css+js,要兼容各个浏览器,懂得一些框架的使用,懂得seo,甚至更多。技术的门槛会越来越低,要求的技能也会越来越高,不仅仅是多还要求深入,然而高手是不会缺乏市场竞争的。优胜劣汰嘛,也就说明了现在应届大学生要面临比较残酷的竞争,没实力的说话都不敢大声点。技术行业是这样,其他行业也是同样的,社会在进步,企业不可能体谅你是应届大学生,然后付出给更多的培训成本去选择一个什么都不懂的人的,企业做任何一件事,都是有财务核算收益比的。说那么多,就想说去努力就对了。一个人对别人要学会尊重,同时也要给自己自信。你要相信努力过后,你跑在同届毕业生的80前面,因为你有努力的想法,已经跑赢了50%的人,努力+行动跑赢80%,我觉得是没有问题的。现在有很多刚毕业的,可以跑赢工作了2-3年的人,所以自信是成功的第一步。

    阅读全文>>

  • 多线程基础

    post by onelong / 2016-4-20 14:12 Wednesday [apple]

    线程、进程,线程安全,进程同步,可见性,一致性,锁,信号量,并发,并行

    从操作系统概念上说,线程是最小的可执行单位,也就是系统调度的最小单位。进程是资源分配的最小单位。线程是依赖进程存在的,共享进程内的资源,如内存,cpu,io等。在操作系统的发展过程中,为了提高系统的稳定性、吞吐量和安全性,操作系统内核和用户态做了隔离,例如Linux有内核线程,用户线程,内核进程,用户进程,从根本上Linux是没有线程的,线程对Linux系统来说是个特殊的进程。那么用户线程和内核线程是一一对应呢?从宏观上看是一一对应的,在用户态的没一个线程,都会在内核有对应的执行线程,但是由于资源的限制,用户态的线程和内核线程是多对一的关系。用户进程和内核进程也类似。具体怎样对应的,这里就不探讨了。 为了提高操作系统的实时性,操作系统是以时间片轮转来实现任务调度的。理论上时间片内是不可以被中断的,可认为是cpu最小的单位执行时间。现代操作系统为了提高用户体验,线程都是抢占式的,而中断一般在时间片用完的时候发生。线程、进程和CPU都是多对一的关系,所以存在进程线程切换的问题。 线程内部还是有自己内存空间的,所以有个概念叫线程内存模型。线程内部有自己私有的本地内存,故线程和线程之间的本地内存存在可见性问题。例如全局变量A在线程1修改后,线程2并不一定能拿到A的修改值,因为线程1会把全局变量A拷贝到本地内存,修改后并不会马上同步。在编译的时候,编译器为了优化,(例如利用超线程技术)可能会重排指令的执行顺序,这就会存在一致性了。

    阅读全文>>

  • 美好的一天从早餐开始

    post by onelong / 2016-4-16 21:06 Saturday [工作]

    早上早起,送老妈去看医生,送大人物去上班,在新青吃了个隔了好久没有吃了的石磨肠粉,我觉得哪里的肠粉口感很好,虽然我不挑吃,如果不是为了控制体重,我会选择尝试更多美食,在深圳吃个早餐都是匆匆忙忙的,有时候都不知道什么味道就吃完了。深圳楼下的那个肠粉做得一点都不滑,虽然也不是很贵。还有十字路口哪家说专业做肠粉的,就不说了,还不如路边摊。单纯从吃方面来谈物价,深圳和珠海差不了多少, 但是真的不怎么好吃。在深圳工作,我喜欢早早起来坐地铁上班,早早到办公室,看看无聊的新闻,听听音乐,想一想今天要做的事情或者试一试昨晚想到的东西。晚一点去上班通常是很挤很挤的,挤到你都没心情了,所以早早到办公室看着楼下的堵车,看着匆匆忙忙奔跑上班的孩童。好的心情,才是美好一天的开始,不管怎样的忙碌,不管遇到什么问题,都应该学会享受每一刻,乐观快乐的面对,这才是我们应该有的生活态度。 好心情,有时候也是一种能力。很多人缺乏这种能力,才会那么多抱怨,那么多吐槽。生活中有很多事情,我们真的无能为力去改变的,与其天天和自己过意不去,还不如选择接受它,甚至换个心情去享受,你才会变得不一样。生活的苦,工作的苦,其实每个人都是有的,心态决定了自己情绪和表现。我不喜欢单休的公司,现在很多时候听到什么996,5.5天,大小周的公司,基本没有什么兴趣去面试,我不抗拒工作日加班,但我要有自己的时间,不管我是利用这个时间去写东西,看电视剧,看电影,打码,甚至在家加班,我都是觉得我是自己支配的,我喜欢这样的感觉。敲着键盘,偶尔转头看看电视,再偶尔跑去窗口看着稻田里刚刚翻绿的水稻,这才是我想要的生活。 坐在电脑前反思这两周的做的事情,还是蛮有意思的。咽喉发炎熬了两周,没有去看医生,本来是想去阿姨哪里喝个冰糖雪梨的,可是天气不给力,天天下雨,后来自己买了几个雪梨吃下去,真的化痰了,看来我还是比较了解的自己的身体的。今天送完大人物去上班,就买了点雪梨煲糖水。这个季节的建议大家尽可能不要上火,不然很容易咽喉炎和感冒的,经常用眼的孩童,多喝一些清肝明目的汤水,很多人也许会说,我以前都不用这样呀,中医里面是这样说的,一方水土养一方人,所以人的身体也会随之环境和季节变化的。 最近也了解了一下很火爆的,在Github上有3w多个star的react native,看来大家对跨平台跨平台的意愿也越来越强烈呢,Facebook的想法挺好的,据多方了解,react native有些创业公司在用,手机qq和美团在一些无关紧要的模块试水了react native,就我个人的了解,react native除了存在或多或少的性能问题之外,还有很多人不完善的地方,需要自己定义控件,也就是还是需要native的能力,这样的跨平台能力已经超乎我们的想象了,反正都是要折腾,我就不会选择它来折腾。react native和MUI相比,react native至少是开源的,有技术能力的个人或者企业,遇到问题了就解决,但是我们普通打码员只能依赖百度和Google解决问题,万一解决不了那就麻烦了,难道重写?公司里面就有一个用MUI开发的app,用绿盟扫墓漏洞的时候,然后遇到一个问题activity劫持问题和加壳的问题。加壳的问题用爱加密解决了,但是劫持问题3个月都解决不了,我看了一下MUI的文档,发现没有任何配置堆栈的api,甚至自己一个服务都不可以,都只能靠官方开发支持。使用第三方框架开发就害怕遇到这样问题,react native虽然是开源的,但是没有专门的team去维护,我比较担心的是,将来万一苹果的审核制度变了,我们该如何应对呢?如果像bat哪有的大公司,有很多产品的线,当然可以试水,甚至可以成立一个独立的team来维护sdk。所以可以去了解,去玩,但是在产品中使用,还是要谨慎,包括之前了解的kotlin和swift,都存在很多变数。当然swift是未来已经是必然的事情了,但是swift从1.0迅速发展到3.0的过程中在语法上还是有很多变化的,虽然xcode可以自动修正一部分,但是对一个几千个文件的项目而言,还是很麻烦。我知道很多人很热情去尝试了,甚至很多开发者认为会多一门语言就是多一项技能。我并不这样认为的,语言都是表象,而我要掌握的是本质的上东西的,比如更入的了解iOS系统机制和原理。有时候学习需要一个很痛苦的过程,对一个有丰富经验的人来说,或许能先弄懂最顶层原理的东西,然后围绕原理展开学习。但是对于一般人可能不一定适合,因为层次还不够。所以学习痛苦迷惘的时候就发生了,我个人认为学习会经历一个这样的过程:现象到本质,本质到现象。从现象到本质是一个相对辛苦的过程,很多人经历这个事情就会停留在一个瓶颈期,迷惘期,这是这样很多人就一直停留着或者转行。然后从本质到现象是一个更辛苦的过程,这也是一个创造的过程。知道很多大道理,依然过不好这一生,也就是这样说来的,走不出本质到现象的过程,领悟不到要领。 工作需要敏感的心,这份敏感的心或许会给你带来不一样的收获。几年前,我在学习服务器并发和分布式的时候,最后因为没有实践环境放弃了。过程中我也有很多疑惑,例如多进程访问数据库的怎样同步,怎样集群等。直到最近听到一个同事在做优化的项目的时候,无意的一句话让我明白了之前的遗憾。对于每一个进程的线程数是有限制的,所以必须集群。我之前无视node.js,因为我觉得单线程的,不利于cpu和内存的利用,做不了高并发的。然后现在Node.js很火,也说明了当初认为的瓶颈都不是问题了。也是这样激起我那份好奇的心,我去尝试使用Node.js去完善自己的知识体系。为什么选择node.js玩,不弄熟悉的java呢,应该够简洁,我喜欢golang也是这原因。java web老是要运行在tomcat上,还有好多配置项,我觉得好麻烦,部署什么的,也好麻烦,而node.js最适合入门了,而且重新熟悉javascript或许对未来也有点意义。也是这样的一次尝试,对mongodb有了不一样的了解,也重新买书看sql语句,虽然sql语句在mongodb上没有用,但是对自己有用。今天再玩一玩node.js集群和redis session 共享,也算有不一样的收获了。折腾那么多,就是为了搞清楚原理,这样对我以后无论是做客户端还是服务器都是有帮助的,有时候经验是折腾出来的。 努力去做自己喜欢的事情,哪怕是徒劳的。每个不求上进的日子,都是对生命的辜负。

  • 谈谈NSURLSession

    post by onelong / 2016-4-15 14:39 Friday [apple]

    一直想写关于NSURLSession的总结,但是这些天有点忙,忙着了解一些新的方案。对于NSURLSession是怎样使用的,我想大家都很熟了,我就不在多说了。但是还是需要写些代码,下面看看创建NSURLSession代码,有三个参数,1、指定配置,2、设置代理 3、队列代理。那么干嘛还要设置delegateQueue呢?带着这个疑问往下走吧。

    阅读全文>>

  • Objective-C Runtime总结

    post by onelong / 2016-4-9 18:00 Saturday [apple]

    Objective-C Runtime全面总结,http://www.jianshu.com/p/6f3c0319842b

  • iOS 应用架构

    post by onelong / 2016-4-2 18:11 Saturday [apple]

    开始在简书上写文章了!http://www.jianshu.com/p/22b46a8dced6 希望得到大家的支持吧

  • iOS真的安全吗?

    post by onelong / 2016-4-1 22:00 Friday [工作]

    最近看了很多关于手机安全方面的文章,突然感觉到现在移动平台(iOS,Android)上面都有很多不安全的地方,很多时候大家都认为iOS比Android要安全,包括我也是这样认为的。事实上在相同的环境保护下,iOS的问题也许会更加突出。iOS app的安全源于app store的严格审核,如果在iOS和android在都不审核的环境下,iOS不见安全。首先我们应用本身是不能得知ipa是否被重新签名了,iOS系统本身对api大多都是没有权限控制的,所以只要能安装到系统的app,很多私有api是可以调用的,调用私用的api很容易导致安全和隐私的问题。我举个例子吧,钓鱼-在非越狱手机上也是可以检测某app是否正在运行,然后做一些相同的UI界面进行钓鱼。很多时候果粉对苹果的信心是百分之百的,也不会特别留心观察是否有异常就把帐号密码输入了。这里有一篇文章“在非越狱的iPhone 6 (iOS 8.1.3) 上进行钓鱼攻击 (盗取App Store密码)”,感兴趣的可以阅读。还有另外一篇说到支付宝和微信,通过iOS URL Scheme 劫持+钓鱼成功盗取账号密码密码,很多东西防不胜防。认为iOS安全,就是因为我们对它了解得太少了,信任有时候也是一种堕落的开始。这里还有一篇文章iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码”,这个属于app本身设计的缺陷导致的问题。在XcodeGhost之后,大家更关注移动互联网的安全了,这也是我最近一段时间花很多精力去了解安全这个话题。像文章中劫持和钓鱼,对一半用户是防不胜防的。所以不要过分信任,在使用软件的时候,尽可能在app store上面下载正版软件,当然不是只有下载正版软件就没有问题了,没有必要用的和垃圾软件少下载, iOS URL Scheme 劫持是app本身的设计缺陷,还是可以通过苹果的审核。
    这几天一直在弄自动抢红包,
    在非越狱手机上进行App Hook,虽然我没有成功, 我没有成功是有原因的。在iPhone4上解密出来的app无法静态注入,我尝试过用自己的app进行注入,是完全可以的。网上都有自动抢红包的教程,我相信确实是可行的。通过这个尝试再次说明了,不越狱不代表安全。