大量数据表的优化方案

1、对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

select id from t where num is null

ios开发高手进阶

  1. swift swizzling

    • 交换两个方法的实现 -> 如在系统类的函数里增加统计、日志等代码
    • 增加类的方法或者变量 (修改framework的实现)
    • 获取类的所有方法和属性
    • 利用热更新技术解bug
      (selectors, methods, implementations的概念)
      (framework里可以通过extension uiapplication,在next里实现)
  2. swift的优势

    • swift容易阅读和写:如类的初始化少了alloc、init,拼接数组、字符串,方法调用.等
    • 更易于维护:文件数量少,只有.swift, 而不是.h+.m
    • 更安全:optional类型,?!
    • 函数式编程,减少大量代码
    • 更高效:swift语言引擎

    缺点:swift语言不稳定,升级语言版本导致工程大量改动;无法直接和c\c++混编;(其他如:开源、技术文章都没问题)

  3. 提效:使用合适的工具,合理利用第三方资源

    • cocoapod、maven
    • jenkins 持续集成
    • jira
    • 单元测试
    • 组件库
    • react native实践
    • 函数式编程
  4. 提升app质量:规范开发流程,提升团队成员编码能力和审美能力

    • 代码质量
      • 代码解耦:组件化
      • 规范化:编码规范
      • 代码走查
      • 踩坑记录总结
    • 美观性
      • 制定规范,统一风格
      • CI:紧跟ios的风格变更
    • 易用性(薄弱:缺少团队支持)
      • 用户点击数据统计
      • 参考同行
      • 踩坑记录
  5. 团队能力提升:

    • 专题培训
    • 读书会
    • wiki:环境搭建、工具分享、技术积累
  6. 性能优化:instruments
    可能会影响性能的原因:肆意调用数据库而没有用cache、复杂UI大量使用约束、离屏渲染、像素混合

    • 非主线程处理
    • 异步处理事件
    • i/o性能优化:
      • NSCache
    • 控制 App 的 Wake 次数:通知,VoIP,定位,蓝牙等都会使设备从 Standby 状态唤起。
    • 及时关闭摄像头、电筒等耗电大户:如二维码扫描等页面
    • 预加载资源,如图片、网络数据等等
    • 对大图片进行缩放
    • 降低布局的复杂度
    • UIView的创建代价很大,一些可以复用的view可以cache。如tableview的cell
    • 缓存:uiview、图片、布局、网络数据
      参考:
      深入剖析 iOS 性能优化
      ios性能优化探索
      iOS性能优化系列篇之“列表流畅度优化”
  7. gcd: 异步执行回主线程\qos\after\DispatchGroup\Semaphore\Barrier \串行队列\并行队列
    Swift4.0 - GCD

  8. CF:core foundation 是比较底层的C语言的库

  9. runloop:保持线程不退出
    多线程(nsthread、gcd、phtread)

  10. 内存管理:
    引用计数(强引用,弱引用)
    场景:timer、block、gcd、代理、泛型

  11. swift特性语言:lazy、willset\didset\get\set、嵌套函数、protocol的组合、

  12. animation

  13. AB测试

ios踩过的坑

title: ios踩过的坑

tags:ios

  1. AFNetWorking的HTTP Basic Auth鉴权一直失败:Authorization Error
    原因: 设置了错误的content-type
1
2
3
4
5
6
7
8
9
var params = basicParams()
params["aa"] = "sel"
params["bb"] = "some"

let array = stream.components(separatedBy: ",")
var bodyParam = [String : Any]()
bodyParam["stream"] = array
let bodyString = jsonString(bodyParam as NSDictionary)
postWithParams(getRequestURL("api", ak: self.ak, body: bodyString, params: params), params: bodyParam, complete: complete)

Swift日期格式处理

1、在平时的开发中我们会遇到很多和时间有关的处理,比如App中显示一天微博的发布时间 、个人信息等等。
下面以微博日期格式为例:
Sun May 24 12:12:00 +0800 2015
星期 月 日 时:分:秒 时区 年
这种合适的时间是我们最常见的时间,但是 它对于大多数来说是没有任何意思的 。我们要从一个字符串中解析得到准确的时间必须要指定正确的格式字符串,以及对应的时区标示。

git

  1. 基本概念:
    正常情况下,我们的工作流就是3个步骤,:

    1
    2
    3
    git add .
    git commit -m "comment"
    git push
  2. git add .把所有文件放入暂存区;

  3. git commit把所有文件从暂存区提交进本地仓库;
  4. git push把所有文件从本地仓库推送进远程仓库。

4个区
工作区(Working Area)
暂存区(Stage)
本地仓库(Local Repository)
远程仓库(Remote Repository)

5种状态
未修改(Origin)
已修改(Modified)
已暂存(Staged)
已提交(Committed)
已推送(Pushed)

  1. 检查修改
    git diff:这个命令只检查我们的工作区和暂存区之间的差异

已暂存,未提交:

1
git diff --cached

git diff –cached 检查暂存区和本地仓库之间的差异

已提交,未推送:

1
git diff master origin/master

master就是你的本地仓库,而origin/master就是你的远程仓库,master是主分支的意思,因为我们都在主分支上工作,所以这里两边都是master,而origin就代表远程。

  1. 撤销修改
    已修改,未暂存
    如果我们只是在编辑器里修改了文件,但还没有执行git add .,这时候我们的文件还在工作区,并没有进入暂存区,我们可以用:
    1
    git checkout .

或者

1
git reset --hard

来进行撤销操作。

已暂存,未提交
你已经执行了git add .,但还没有执行git commit -m “comment”。这时候你意识到了错误,想要撤销,你可以执行:

1
2
git reset
git checkout .

或者

1
git reset --hard

git reset只是把修改退回到了git add .之前的状态,也就是说文件本身还处于已修改未暂存状态,你如果想退回未修改状态,还需要执行git checkout .。
或许你已经注意到了,以上两个步骤都可以用同一个命令git reset –hard来完成。是的,就是这个强大的命令,可以一步到位地把你的修改完全恢复到未修改的状态。

已提交,未推送
你的手太快,你既执行了git add .,又执行了git commit,这时候你的代码已经进入了你的本地仓库,然而你后悔了,怎么办?不要着急,还有办法。

1
git reset --hard origin/master

还是这个git reset –hard命令,只不过这次多了一个参数origin/master,正如我们上面讲过的,origin/master代表远程仓库,既然你已经污染了你的本地仓库,那么就从远程仓库把代码取回来吧。

已推送
很不幸,你的手实在是太快了,你既git add了,又git commit了,并且还git push了,这时你的代码已经进入远程仓库。如果你想恢复的话,还好,由于你的本地仓库和远程仓库是等价的,你只需要先恢复本地仓库,再强制push到远程仓库就好了:

1
2
git reset --hard HEAD^
git push -f

附加
git log

命令显示从最近到最远的提交日志
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上
git log –pretty=oneline
git reflog 用来记录你的每一次命令
git status 查看工作区状态
git diff HEAD – 文件名 可以查看工作区和版本库里面最新版本的区别
git rm – 文件名 用于删除一个文件
git push origin HEAD:refs/for/master 代码走查

ios打包ipa文件的脚本

  1. 编译打包命令:
    1
    xcodebuild archive -workspace xxxx.xcworkspace -scheme pppp -configuration Release -archivePath ../export/xxxx.xcarchive

其中xxxx为工程名称,pppp为所用的profile的名称(不带后缀)

  1. 生成ipa文件
    1
    xcodebuild -exportArchive -archivePath ../export/xxxx.xcarchive -exportPath ../export/ -exportOptionsPlist ExportOptions.plist

其中ExportOptions.plist文件可以在你手动打包ipa后,ipa文件的同级目录中找到

mac电脑配置路由表

很多公司都有自己的局域网,和互联网是两张不互通的网络。如果同一台电脑通过两张网卡接入两个网络,windows电脑能自动选路,而mac电脑则要自己配置了。

最开始想到的是使用route命令,如:
sudo route add 18.0.0.0/24 10.0.66.2

UICollectionView

  1. 如何修改装饰视图的背景色?(或者其他属性、新增子视图等等)
    a. 继承UICollectionViewLayoutAttributes自定义一个attributes
    b. 使用自定义的重写UICollectionReusableView的apply函数
    c. 重写UICollectionViewFlowLayout的func layoutAttributesForDecorationView(ofKind elementKind: String, at indexPath: IndexPath)函数,返回自定义的attributes

2.

,