其他

 

 

  1. Set不能放重复的。TreeSet 底层是通过 TreeMap 来实现的(如同HashSet底层是是通过HashMap来实现的一样)TreeMap 的实现就是红黑树算法。 主要区别是一个实现map接口一个实现set接口。Collections工具类中的sort()方法比较元素,需要传入实现compareable接口的方法。

 

 

 

 

  1.  。

 

 

 

34.

大型网站的架构

 

  1. 分层:持久层,业务层,表示层
  2. 分隔:功能拆分
  3. 分布式部署: nginx,各种中间件, spring boot (快速配置脚手架)/ spring cloud(api网管zuul)
  4. 缓存(redis / memche / mongodb)
  5. 异步(activemq / rabbitmq / kfaka)
  6. 冗余
  7. 服务降级

 

 

单台服务器->应用/数据/文件服务器分离->缓存(本地缓存/分布是缓存)->应用服务器集群->cdn和反向代理-> 分布式数据库(借助中间件如mycat)分布式文件系统(分库分表业务拆分)-> 使用nosql数据库和搜索引擎 -> 异步处理(消息队列)

 

 

 

性能:浏览器(浏览器缓存(cache-control,expires),页面压缩,减少cookie传输)

CDN

缓存:

异步:

NOSQL:高性能

 

 

伸缩性: nosql天生支持海量数据,容易伸缩。应用集群容易添加服务器。缓存容易添加服务器(一致性哈希)

主要通过事件驱动(消息队列)和分布式来实施伸缩性。

 

 

  1. 首先求出memcached服务器(节点)的哈希值,并将其配置到0~232的圆(continuum)上。
  2. 然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。
  3. 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。

 

 

性能:

 

响应时间/并发数/吞吐量(tps/hps/qps)/性能计数器(top参数等)

 

 

服务器最佳线程数  = 【任务执行时间/(任务执行时间 - IO等待时间)】 * cpu内核数

如果是cpu计算型任务 : 线程数=CPU个数,如果是IO等待型的则多启动线程能够提高性能。

 

 

35.

 

 

36.

 

fail-fast : java util 的集合类。 遍历集合时被修改。 修改时会有标示。Concurrent Modification Exception

fail-safe :java concrent下的集合类。  基于底层复制的集合,遍历的时候遍历的是副本,不会抛出Concurrent Modification Exception异常

 

37.

Java8

try-with-resources

捕获多个Exception

持久带被移到堆外

 

 

 

 

38.

 

 

 

 

 

 

 

 

  1. 存储技术  hdfs(分布式文件系统,一个nameNode,多个dateNode), raid。

 

  1. 可用性。4个9(具备自动恢复能力高可用),全年53分钟。   5个9(极高可用),全年5分钟。2个9基本可用,全年88小时。

 

  1. 高可用: 无状态的请求打到集群上。Session复制(集群规模过大不适用),session绑定(不符合高可用)。Cookie记录session(量太大)。 session服务器。

分级管理,异步处理,服务降级,幂等性设计(不可避免的重复调用和一次调用的结果相同,交易编号的有效性校验)

 

幂等解决方案:

         乐观悲观锁

         去重表/ Source+seq 做唯一索引 , 利用数据库唯一索引

         Token防止页面重复提交

         状态机    

 

数据存储系统无法满足CAP,数据一致性,可用性,分区容忍性(跨网分区伸缩)。

牺牲数据一致(补偿机制)

 

  1. 安全。  xss攻击:诱导用户点击嵌入恶意脚本的链接,窃取cookie中的敏感信息。 提交恶意脚本的请求并入库,展示页面的时候包含恶意脚本。  应对:过滤< &gt; 等字符。  httponly(cookie中增加httpOnly属性,浏览器会禁止js访问含有httpOnly属性的cookie)

 

sql 注入 : 过滤特殊字符。 参数绑定(prepareStatment)

 

Csrf : 跨站伪造请求。Token,验证码,referer check

 

 

  1. 秒杀系统设计:

 

  1. 独立部署
  2. 页面静态化
  3. 专用带宽
  4. 随机下单URL

 

限制访问频率(同一个uid),限流(真正成功的才显示下单页面),消峰(缓存,中间件),

如缓存用于接受请求,消息队列用于将缓存中的请求同步到数据库

 

  1. hashmap  treemap  linkedhashmap

 

Hashmap 无序,jdk8以后底层代码改了,当链表上hashcode相同的节点大于8的时候,使用红黑树存储。线程不安全。初始容量(扩容)都是2的n次幂,原因是计算放在数组哪个位置的时候不是普通的%,而是位运算(等价不等效),2的n次幂保证按位操作高效。负载因子控制扩容的时机。超过容量*负载因子就扩容。

 

treeMap有序,按照key默认排序。可以自定义排序器。使用场景(按照时间页面显示每天的数据)。红黑树。

Linkhashmap : 保存输入顺序。Hashmap的子类,增加了双向链表的结构所以能够保证输入顺序。

 

http://www.importnew.com/27326.html

转载于:https://my.oschina.net/u/1992157/blog/3008654

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值