其它

作者: lingnanlu | 来源:发表于2016-09-17 20:19 被阅读14次

1. Cookies与Session的区别

结合用户登录中两者的角色去说

因为Http是无状态的, 而有时就需要保持状态, 这时就使用Session机制来保持状态信息

最典型的就是用户登录后要保持状态。

当用户第一次访问站点时,服务器为用户创建一个session ID,这就是针对这个用户的唯一标识,每一个访问的用户都会得到一个自己独有的session ID,这个session ID会存放在响应头里的cookie中,之后发送给客户端。这样客户端就会拥有一个该站点给他的session ID。

当用户第二次访问该站点时,浏览器会带着本地存放的cookie(里面存有上次得到的session ID)随着请求一起发送到服务器,服务端接到请求后会检测是否有session ID,如果有就会找到响应的session文件,把其中的信息读取出来;如果没有就跟第一次一样再创建个新的。

如果该session表示用户是登录的, 那么就相当于记住了用户的登录状态。

当cookies过期后,session就失效了, 需要用户重新登录得到新的session ID

Session原理简述

2. 各种设计模式

谈是什么以及在各个框架中的应用

  1. 访问者模式, 将数据结构与算法分离, 树的遍历, 语法树的改写,详细介绍Walk与Visit
  2. 代理:AOP,Log,在不改变已有类的情况下, 为其添加功能
  3. 单例
  4. 工厂: 利用反射生成对象
  5. 模板:Netty中抽象类的使用
  6. 适配器:将不适配的接口变成适配的接口
  7. 装饰模式与代理模式的区别:代理模式往往是代理类代替用户去创建代理类, 也就是用户往往是直接使用代理类, 而装饰用户需要用户显示的创建被装饰类以及装饰类。(对此保持疑问)
  8. 观察者模式, 发布-订阅, Model-View, EventBus中使用了
  9. 拦截过渡器模式: Netty中的Pipeline

装饰模式与代理模式的区别(转载)

4. select与epoll的区别

https://segmentfault.com/a/1190000003063859#articleHeader17

5. TCP协议仔细看一遍

一个IP包只能有一个TCP segment, 不能有多个, 这是因为TCP头部并没有关于整个Segment长度的字段, 但是一个TCP segment可以分成多个, 每一个添加一个头部, 分为多个IP字段传送.

12. 针对3次握手的恶意攻击,如何应对

6. 缓存算法 FIFO, LRU, LFU

在缓存空间有限的情况下, 以上算法仅仅是替换策略和访问策略的不同

6.1 各缓存算法的替换策略与实现

FIFO: 这个最简单, 利用一个队列, 替换掉队头的元素, 为了快速访问到元素, 可以利用HashMap保存Key在队列中的位置

LRU:如果一个数据在最近一段时间没有被访问到, 在将来它被访问到的可能性也很小。

实现, 可以利用一个链表, 从链表头到链表尾代表访问时间越来越久远, 链表头的是最近访问的, 表尾的是很久没有访问的。如果访问了一个节点, 就将其放入到链表头部。

为了加快各中操作的效率, 见如下文章

  1. LRU cache实现 (Java)
  2. LRU Cache(C++)

LFU:最近最少使用, 注意与LRU的不同, LRU是基于访问时间的, LFU是基于访问次数的, 所以LFU算法要想办法记住一个条目最近的访问次数

实现

  1. 利用一个数组存储数据项, 利用HashMap存储数据项在数组中的位置, 然后为每个数据项设计一个访问频次, 当数据项命令中, 访问频次自增, 在淘汰时淘汰访问频次最少的数据, 因为要找到访问频次最少的数据需要遍历数组, 所以淘汰的时间复杂度为O(n)。插入和访问操作都是O(1)

  2. 因为每一个都要淘汰一个访问最少的数据, 所以可以利用小顶堆+hashmap, 这样, 插入和淘汰操作都是O(logN)

6.2 对缓存算法的选择:结合实际的场景,选择命中率高的。

举例:Android中List所使用图片的缓存算法.

想想List中对图片的使用, 总是期待保留最近看过的, 如当在第100页时, 很可能回到第99页, 而不太可能回到第1页, 那么这里就选择LRU, Android中的LRUCache就是这样做的

参见

缓存算法-FIFO、LFU、LRU

8. 进程间通信几种方式

  1. 管道:速度慢,容量有限,只有父子进程能通讯
  2. 命名管道:不相关进程间也可以通讯
  3. FIFO:任何进程间都能通讯,但速度慢
  4. 消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
  5. 信号量:不能传递复杂消息,只能用来同步
  6. 共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存

9. 常用的Hash算法

Hash函数构造方法

  1. 直接定址法:取关键字或关键字的某个线程函数值为哈希地址
  2. 数字分析法:取关键字的若干数位组成哈希地址
  3. 除留余数法:除某一个数得到的余数作为Hash地址

处理冲突的方法

  1. 开放定址法:就是不断探测冲突地址后的位置是否有空的
  2. 再哈希法:当冲突时, 利用另一个哈希函数计算地址
  3. 链地址法:最常用。

17. GET, POST, PUT以及幂等性

GET用来获取资源, 不应该有副作用, 是幂等的

POST用来提交数据, 肯定有副作用, 不是幂等的

PUT用来更新数据, 有副作用, 是幂等的

纠正自己以前错误的认识, 以RFC为准

What is the difference between POST and GET?

浅谈HTTP中Get与Post的区别

post 和get请求的区别(html)

系统幂等以及常用实现方式

不能只从网上听说, 这也是知识只从网上听说导致的弊端.

相关文章

  • 其它

    1最新年龄划分标准出台,对照过后惊呆了!

  • 其它

    mapreduce原理,partion发生在什么阶段 hadoop生态说一说 介绍几种熟悉的设计模式 手写多线程下...

  • 其它

    1. Cookies与Session的区别 结合用户登录中两者的角色去说 因为Http是无状态的, 而有时就需要保...

  • 其它

    1.改变bounds的大小,fram的大小和坐标都改变 center不变2.transform有make事直接方法...

  • 其它

    洗澡回来,我对姐说,去散散步,一会儿回家。 姐家是新农村购置房,今年新搬的家,离挨着省道。乡下的房子首先考虑便捷,...

  • 其它

    随着自媒体的盛行,获取知识的途径和范围越来越大,只要你想知道,通过搜索关键字,你所想知道的信息就可以获得。还有微信...

  • 其它

    留守老年人视频电话亭设计_路明磊 市场分析啊设计定位啊人机啊,各个方面都有考虑到,有一套完整的流程。但是页数不多,...

  • 其它

    1. 文件断点续传实现http请求头里带上Range参数。 2. html5 video标签不支持解码mpeg4编...

  • 其它都只是其它而已

    人多了就会有矛盾,大家性格不一样,难免会发生一些不愉快的事情。 但都是成年人,都不会把话说的有多绝,一旦捅破那层纸...

  • 关于《少女或其它》及其它

    文:于晓威 绘画首先是一种语言,与文学作品一样,这语言说出来后,便不属于你自己。语言具有无限的增殖力,它取决于受众...

网友评论

      本文标题:其它

      本文链接:https://www.haomeiwen.com/subject/swrwettx.html