- redis的持久化RDB AOF
· RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
· AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
2.多线程thread类继承接口runable
3.jwt
4.秒杀方案
- 高并发,cache,锁机制
- 基于缓存架构redis,memcached的先进先出队列
- 稍微大一点的秒杀,肯定是分布式集群的。
- 数据库压力
- 秒杀超卖问题
- 如何防止用户来刷,黑名单?IP限制?
- 利用memcached的带原子性特性的操作做并发控制
当在并发的时候可以把人都放进去,根据优先队列,进行筛选,在放结果给前端静态页面
5优先队列
堆排序,二叉树进行堆排序
- nginx反向代理和负载均衡
多台客户端经过互联网,进入nginx服务器,根据负载均衡的算法,把请求分配给那个web服务器
负载均衡的算法
一、Nginx负载均衡算法
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
2、weight(轮询权值)
weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
3、ip_hash
每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
4、fair
比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair模块。
5、url_hash
按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包。
- Solr
导入中文分词器
- muysql引擎
.Innodb引擎,Innodb引擎提供了对数据库ACID事务的支持。并且还提供了行级锁和外键的约束。它的设计的目标就是处理大数据容量的数据库系统。它本身实际上是基于Mysql后台的完整的系统。Mysql运行的时候,Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是,该引擎是不支持全文搜索的。同时,启动也比较的慢,它是不会保存表的行数的。当进行Select count(*) from table指令的时候,需要进行扫描全表。所以当需要使用数据库的事务时,该引擎就是首选。由于锁的粒度小,写操作是不会锁定全表的。所以在并发度较高的场景下使用会提升效率的。
b.MyIASM引擎,它是MySql的默认引擎,但不提供事务的支持,也不支持行级锁和外键。因此当执行Insert插入和Update更新语句时,即执行写操作的时候需要锁定这个表。所以会导致效率会降低。不过和Innodb不同的是,MyIASM引擎是保存了表的行数,于是当进行Select count(*) from table语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的。可以将MyIASM作为数据库引擎的首先。
补充2点:
c.大容量的数据集时趋向于选择Innodb。因为它支持事务处理和故障的恢复。Innodb可以利用数据日志来进行数据的恢复。主键的查询在Innodb也是比较快的。
d.大批量的插入语句时(这里是INSERT语句)在MyIASM引擎中执行的比较的快,但是UPDATE语句在Innodb下执行的会比较的快,尤其是在并发量大的时候。
2.两种引擎所使用的索引的数据结构是什么?
答案:都是B+树!
MyIASM引擎,B+树的数据结构中存储的内容实际上是实际数据的地址值。也就是说它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。
Innodb引擎的索引的数据结构也是B+树,只不过数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。
10数据库连接池的种类
1 dbcp 2 c3p0 3Druid数据库连接池
技术总监面
1.HTTP 协议,7层结构,content-type
content-type:提交的格式原生表单application/x-www-form-urlencoded
文件multipart/form-data json:application/json text/xml
- Nginx,lvs最大的区别
工作再网络层第4层,仅作请求分发用,没有流量,所以在效率上基本不需要太过考虑
nginx工作在网络的第7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等,相比之下lvs并不具备这样的功能,所以nginx单凭这点可以利用的场合就远多于lvs了;但nginx有用的这些功能使其可调整度要高于lvs,所以经常要去触碰触碰,由lvs的第2条优点来看,触碰多了,人为出现问题的几率也就会大。
3Tomcat调优最大允许多少告别并发
- 为什么hashmab的加载因子是0.75
“哈希冲突”和“空间利用率”矛盾的一个折衷。
5.Zookeeper 作为注册中心可以用mysql数据库代替
不可以,首先没有mysql是一个并发的数据库,在并发的情况下可以会导致,订阅出现不可预知的结果,还有就是每次需要消费应用的时候都需要去数据库查询,但是如果数据库没有更新,那么每次查询都是没有必要的。如果服务宕机不能及时删除数据库的信息,会导致数据库里面存储的信息,看似可用却不可用。而zookeeper 的瞬时节点就可以很好的作为成为这样的注册中心,首先你不需要每次都去查询,zookeeper作为一个观察者,如果服务有更新,就会自动通知消费者更新,而且一旦服务没有相应就会及时的去关闭此服务的节点,防止看似可用却不可用。
6多态:多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
7 liunx怎么查看java的内存分配
使用pmap能够查看某一个进程(非java的也能够)的内存使用使用情况,
命令格式:
pmap 进程id
使用jmap能够查看某个Java进程中每一个对象有多少个实例,占用多少内存。
命令格式:
jmap -histo 进程id
使用jstat查看Java内存分布及回收情况
8:缓存与数据库的数据怎么同步