[网易面试]自己总结(三)

海量数据查找top k,算法有什么极端情况?

  1. 利用hash将大文件转换成为N个小文件
  2. 对小文件进行hash_set(key, count)统计
  3. 对小文件的count排序,取出前K个key
  4. 对所有小文件的top K进行总排序,得出最终top k
    极端情况是重复key超过了一半了如何解决
  5. 对所有文件进行hash,如果产生了一个小文件还是比较大,在进行N此hash,假如还是一样大,则进入对该文件进行单独处理
  6. 对文件切分成为M个小文件,对每个小文件进行hash_set(key, count),再对M个小文件进行key的count的统计
  7. 得出大文件key的count值,接着执行上面第四补操作。
    http://blog.csdn.net/v_JULY_v/article/details/6279498

海量url,如果最长公共子串长度超过K,说明是违规,问如何找出所有违规url

假如url能够转换成为ip,则进行如下处理
1. 对所有url转换成为ip,建立tire-tree
2. 对得到的ip进行如上方法的hash划分成为小文件,对小文件进行hash_set(key, count)
3. 对count不为0的key进行KMP的匹配,超过K的标记为违规url
假如url不能够转换成为ip,则进行如下处理
1. 将文件随机分为两个小文件,用bloom fliter求两个小文件的公共url
2. 对取到的公共url进行匹配,记录长度超过k的url
3. 分别对两个小文件循环上面两步,直到文件url数量为1000,在利用量量对比的方法,取出公共子串大于k的url
4. 整理即为最终结果
http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html
http://www.cnblogs.com/mmpc/articles/2047474.html

两个应用间如何通讯,有什么方法

ios应用间通信和分享数据的机制
http://blog.csdn.net/tenfyguo/article/details/9063675
使用UIActivityViewController
http://blog.csdn.net/tonny_guan/article/details/8899273
使用KeychainGroup Access
http://www.2cto.com/kf/201311/255684.html
客制化的URLScheme
UIPasteBoard + URL Scheme
http://blog.csdn.net/likendsl/article/details/7553605

持久化存储有哪些结构,分别在什么场景下应用

  1. 跨设备持久化存储最好采用sqlite,因为其通用性
  2. NSUserDefault比较适合存储一些设置信息
  3. CoreData是预缓存数据的首选,序列化比较方便
  4. plist适合存储一些系统对象数据
  5. NSKeyedArchive适合轻量级的缓存数据

数据库的索引是什么,有什么引擎,建立索引的时候要注意什么

选用B+树索引的原因

  1. 红黑树父子结点相隔较远无法利用局部性,并且其I/O次数可能更多,因此不如B+tree高效
  2. B+tree一个节点可以表示物理存储中一页,能够仅一次I/O读取数据
  3. B+tree叶子节点有链表结构,适合局部数据读取原理
  4. B+tree节点不存取data,且出度更大,因此一页中可以保留的局部内容相对B-tree多

MyISAM和InnoDB

相同的是二者都使用了B+tree
不同的是:

不同点MyISAMInnoDB
聚集与否(即索引文件是否与数据分离)非聚集聚集
区别点引用了主键的地址引用了主键的Data域
优点由于引用的是主辅键的地址,因此建立索引是相互独立的直接主键索引查找会比较快
缺点直接索引速度稍逊InnoDB主辅索引切换的代价大,需要两次索引检索

建立索引需要注意的几点

  • 第一种情况是表记录比较少,例如一两千条甚至只有几百条记录的表,没必要建索引,让查询做全表扫描就好了。至于多少条记录才算多,这个个人有个人的看法,我个人的经验是以2000作为分界线,记录数不超过 2000可以考虑不建索引,超过2000条可以酌情考虑索引。

  • 另一种不建议建索引的情况是索引的选择性较低。所谓索引的选择性(Selectivity),是指不重复的索引值(也叫基数,Cardinality)与表记录数(#T)的比值:

    Index Selectivity = Cardinality / #T
    显然选择性的取值范围为(0, 1],选择性越高的索引价值越大,这是由B+Tree的性质决定的。

  • InnoDB尽量使用自增性主键作为索引值
    http://blog.csdn.net/shawjan/article/details/48917791

远程推送是如何实现的

里面有远程推送机制
http://blog.csdn.net/shawjan/article/details/45466759

https的交互过程,与http的区别,http协议的大致内容,http中keep-alive和TCP中的keep-alive

分为request和response

request

  1. firstline : method url + version number
  2. header:客户端信息(user agent)、编码格式(accpet language、accept encoding)、请求长度(content length)、请求内容类型(content type)、请求时间(date)、链接类型(connection)、cookie
  3. body

response

  1. firstline :version number status message
  2. header:服务器信息(server)、编码格式(vary)、内容类型(content type)、内容长度(content length)、缓存控制(cache control 、expired、last modified)、请求日期(date)
  3. body
    http://kb.cnblogs.com/page/130970/

与tcp keep alive的区别

http keep alive是为了让tcp链接保持链接,酱紫不用每次都建立tcp链接花费时间
tcp keep alive是为了保证请求的一方不盲目等待,当未传输数据超过了keep alive time之后,请求方会发送帧探测对方时候还健在(有可能因为关机、崩溃、主机不可达原因使数据传输不了),如果不在则断开链接,节省资源
简单说就是http 是为了守护tcp,而tcp是为了守护进程协作
http://blog.csdn.net/lys86_1205/article/details/21234867

实现两个人之间的即时通信的架构?XMPP的架构是怎样 ,有没有其他更好的选择

XMPP是一个成熟的即时通信协议,但是太过于冗余,在iOS可以通过APNS+Sever+Client实现一种简单的即时通信方案
1. 远程推送,在 application:didReceiveRemoteNotification: 函数中监听推送消息
2. 如果是私信且应用在后台或未启动,直接启动应用,加载对话窗口
3. 如果私信在前台,直接刷新对话列表,并发送一个Notification通知对话窗口更新
4. 简洁明了~

设计一个框架,能够自动清除网页浏览加载的图片资源,使得内存不会爆

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值