来也一面

一家小公司,问了一些业务问题,够实际,准确的说没有把我当在校生面,更准确的说,自己内心很是失落

因为,我一直都讨厌学校基础知识的考查,然而当今天有人不问我基础知识的时候,我却发现我不会,我想不出来,打脸啊

其实也不是特别打脸,但是对于一个问题我想我也应该有自己的思想。。。。。。。

1)自我介绍

2)收获最大的项目?收获是什么

我说的我的第一个项目

3)项目中最难解决的技术点?

我说了order,然后他说他们也遇见了,花了一上午解决,我认为这都是工作经验的问题,工作的多了,就立刻发现这种低级错误,甚至说都不会去犯这种低级错误

4)如果一个接口,只允许1s中访问1000次上限,怎么做?-----就是在考我限流。。。

首先,我的明确一点,就是我理解错了一点,我把这到问题想成是接口的访问能力,也就是接口的访问能力只有1000

而在真实的使用中,你的接口自然是每秒响应的请求越多越好,因此这个问题,本身就不该在接口上限制,而是应该在接口之前的某个地方限制,限流mq

限流----可以限制在网络层----也就是路由器控制流量的限制,但是相对于应用层,网络层更不可用。。。。。

秒杀技术挑战

假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:

  1. 对现有网站业务造成冲击

    秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

    解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离

  2. 高并发下的应用、数据库负载

    用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。

    解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务

  3. 突然增加的网络及服务器带宽

    假设商品页面大小200K(主要是商品图片大小),那么需要的网络和服务器带宽是2G(200K×10000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

    解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽

 

我说做一个接口监测工具,

面试官提供的解决方案是:

内存中维护一个公共变量,++然后超过次数,给客户端返回错误,

令牌桶解决,设置令牌,没有令牌的无法访问

API调用次数限制实现

 

      在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个 用户,他在一个时间段(interval)内,比如 1 分钟,调用服务器接口的次数不能够 大于一个上限(limit),比如说 100 次。如果用户调用接口的次数超过上限的话,就 直接拒绝用户的请求,返回错误信息。

      这里采用Token Bucket(令牌桶)算法。 

      来也一面

5)问我用面向对象怎么实现

我说建立一个用户表,和一个公众号的表

来也一面

6)留言,相互留言,但是留言有效期仅仅三天,怎么存储?

redis存储,使用hash结构,一般过期删除这种都是redis存储。。。。。。。

7)问我代码管理,我实习的公司怎么做的?有没有代码review,没有直接合并到master分支

GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。

其实就是搭建一个github平台,有一个代码服务器啥的,

安装gitlab,https://www.jianshu.com/p/b04356e014fa

8)有什么问题?我问题留言存储结构的设计。结束嘛

面试官逼逼一通,我没听太明白。。。。核心就是用redi

 

同时过去不久就接到了苏州一家面试。。。。。

记不住问题了,就还记得几个答不上来的问题

数据库日志文件格式?

来也一面

MySQL有不少存储引擎,它们的文件格式不太一样。
共同的是它们的表定义文件都是frm结尾的。
比如flow.frm表示表flow的定义。
我说下Innodb和MyISAM两种引擎吧。
对于MyISAM,其索引和数据是分开的,索引文件后缀名是MYD,数据文件后缀名是MYI。
对于Inoodb,索引和数据都在同个文件,ibd,
具体的可以查MySQL参考手册(有中文版)。

hashmap,hashtable,treemap的区别

Hashtable 与 HashMap类似,但是主要有6点不同。

         1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。   

        2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。   

        3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。   

        4.HashTable使用Enumeration,HashMap使用Iterator。   

        5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。   

        6.哈希值的使用不同,HashTable直接使用对象的hashCode。

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

TreeMap是有序的,HashMap和HashTable是无序的。

Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

这就意味着Hashtable是线程安全的,HashMap不是线程安全的。HashMap效率较高,Hashtable效率较低。 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。

Hashtable不允许null值,HashMap允许null值(key和value都允许)

        TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。

了解系统架构嘛?

error和异常的区别?是否可以捕获

error是错误,和异常exception都是继承自throwable,然后不可以被捕获,exception部分可检查异常是可以被捕获的,