面试过部分童鞋,遇到的一些技术问题总结

    xiaoxiao2021-03-25  106

    为什么要用三层或者多层结构(包括MVC结构)?

    好多人说自己写过三层结构的网站,或者多层结构,结构基本上模仿的petshop。但是问问他们为什么要做成三层结构,有什么好处呢?为什么不写在一起呢?个人认为有几个好处 1. 三层结构降低耦合,方便大型系统的分工。(大多数人会回答这个) 2. 提供代码的重用度。 3. 封装变化,减少因为变化带来的代码变动。这个原则是建立在普遍认为UI的变动会强于底层业务逻辑的变动频率,否则的话,就难以封装变化。 4. 方便单元测试。如果代码糅合在一起,就不好单元测试了,有了问题不好找,只能慢慢调试。 5. 代码更加健壮和便于维护。

    多层结构和单一的糅合在一起哪个运算会快一些?

    很多人回答多层结构会提高运行的效率,个人认为这个是不对的,同等的逻辑和算法,分层会带来效率的损失。但是了代码的健壮,可以牺牲一些性能。

    如何解决高并发的问题?

    初级的高并发 1. 提高算法的性能,特别是访问频率比较高的部分的执行效率。 2. 系统中合理的使用资源的分配,尽可能介绍锁的使用,包括代码中的锁,共享资源的锁和数据库锁。 3. 算法中尽可能减少对数据库和磁盘的使用,合理的使用内存。 4. 针对实时性不太强的数据,使用服务器端的缓存,减少对数据库的访问。 5. 针对静态的资源,图片、css、js等资源使用客户端缓存。 6. 把一些变化不太大的内容做成静态页面 7. 使用ajax异步加载的技术 8. 提高硬件水平。 中级的高并发 1. 把数据库和服务器放在不同的服务器上。来分担服务器压力。 2. 使用单例模式或者其他的内存来缓存一些动态的数据,而不是每次从数据库中去读取。 3. 合理的使用数据库的索引和视图的方式来提高数据的查询效率 高级的高并发 1. 针对应用服务器,考虑分布式和负载均衡的方式来架构,让系统可以水平的去扩展。 2. 对业务进行分解。 2. 使用单独的缓存服务器,常见的是redis和memcache。 3. 使用CDN的方式来缓存静态内容,提高静态CND的击中率。 4. 数据库分库和分表 5. 业务策略,合理的去分摊高峰期的出现。 6. 针对需要统一使用的资源建立单独的分布式结构,比如建立会话(session)服务器。 初级和中级的以提高单台服务器的处理能力为目标,高级的以业务可以分布式横向扩展为目标。

    常见的安全问题和解决方式

    sql注入 过滤SQL的敏感字符,可以结合一些过滤类库和敏感过滤的方式进行处理。使用EF一类的orm框架可以避免常见的SQL注入攻击。

    cc攻击 1. 对于一些耗费资源的访问进行缓存,比如检索等等。 2. 对一些耗费资源的访问进行次数上的限制过滤。 3. 使用CC防火墙进行过滤

    DDOS攻击 没别的办法,使用防火墙,隐匿真实的源IP

    css跨站攻击 1. 过滤掉一些js或者其他的脚本敏感字符,比如把一些敏感的script把半角过滤成全角等等。 2. 一些后台的操作,尽可能用post的方式来操作,比如删除,而不是通过链接的方式来操作,防止链接攻击。

    服务器漏洞 1. 及时的打补丁 2. 合理的使用服务器的防火墙,把非必要的端口全部关闭。 3. 不在服务器上进行过多的其他操作。 4. 卸载所有没必要的软件

    弱口令攻击 1. 限制口令测试测试 2. 使用粘连的图形验证码 3. 对于一些非常严重的权限,可以限制口令登录的IP 4. 定时提醒客户更换口令

    上传漏洞 1. 上传的内容以字节的方式保存在数据库。 2. 严格检查上传的扩展名和mine头 3. 把上传的内容限制在独立的服务器上 4. 取消上传目录的运行和其他的权限 5. 使用类似阿里云的OSS存储对象来保存上传的内容。

    转载请注明原文地址: https://ju.6miu.com/read-3777.html

    最新回复(0)