之前整理了好几期,我面试时遇到的面试候选人,我是如何我去筛选的,这一期,我们来看下一些 面试常问的业务性的问题
你们公司权限认证是如何实现的?
这其实是个通用性的问题,大部分公司 小型公司,或者中型公司都有权限认证,作为一个开发人员,大家或多或少都应该接触过一切,所以会去问下开发人员是否接触过
如果开发 人员没有接触过,那么就会抱着好奇的角度去问他,如果在此项目的基础上
加上一个 权限认证,你会如果去设计 ?
-
简单设计
框架:+ shiro + spring security -
详细设计
-
系统菜单
-
系统角色
-
菜单角色表
-
用户对应的角色
-
用户信息
-
其实说白了,大家可以理解为就是一个 联表的关联查询 ,通过 标识 已经角色关联的id 去进行 权限的 控制 ,最后加入了一张中间表串联起来, 当然还有很多优化的空间
上传数据的安全性你们怎么控制?
对称加密
文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥
解释: 在对称加密算法中,数据发信方将明文和加密密钥一起经过特殊的加密算法处理后,使其变成复杂的加密密文发送出去,收信方收到密文后,若想解读出原文,则需要使用加密时用的密钥以及相同加密算法的逆算法对密文进行解密,才能使其回复成可读明文。在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥,这就需要解密方事先知道加密密钥。
优点: 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
缺点: 没有非对称加密安全.
用途: 一般用于保存用户手机号、身份证等敏感但能解密的信息。
常见的对称加密算法有: AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、HS256
非对称加密
两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密
解释: 同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端.
加密与解密:
● 私钥加密,持有公钥才可以解密
● 公钥加密,持有私钥才可解密
签名:
● 私钥签名, 持有公钥进行验证是否被篡改过.
优点: 非对称加密与对称加密相比,其安全性更好;
缺点: 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
用途: 一般用于签名和认证。私钥服务器保存, 用来加密, 公钥客户拿着用于对于令牌或者签名的解密或者校验使用.
常见的非对称加密算法有: RSA、DSA(数字签名用)、ECC(移动设备用)、RS256 (采用SHA-256 的 RSA 签名)
面试题:上传数据的安全性你们怎么控制?
使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据
生产问题怎么排查?
1,先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题,解决问题
2,如果问题较为复杂,情况就可能会有多种,可能是代码的问题,也有可能是数据的问题
3,远程debug
特别注意,通常公司的正式环境(生产环境)是不允许远程debug的。
一般远程debug都是公司的测试环境,方便调试代码
实现步骤:
前提条件:远程的代码和本地的代码要保持一致
①:远程代码需要配置启动参数:
把项目打包放到服务器后启动项目的参数:
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 project-1.0-SNAPSHOT.jar
-agentlib:jdwp 是通知JVM使用(java debug wire protocol)来运行调试环境
transport=dt_socket 调试数据的传送方式
server=y 参数是指是否支持在server模式
suspend=n 是否在调试客户端建立起来后,再执行JVM。
address=5005 调试端口设置为5005,其它端口也可以
②:idea中设置远程debug
找到idea中的 Edit Configurations…
设置远程debug参数
③idea中启动远程debug
④在本地代码中打断点即可调试远程
怎么快速定位系统的瓶颈?
Arthas(阿尔萨斯)
Arthas
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
你们开发业务的流程是什么?
1,产品经理说需求–》后端+前端+测试
2,定接口(后端主导 | 前端主导 | 前后端协调)
● mock测试
3,后端的工作:设计(技术选型,数据库表[原型或PRD])+ 编码;前端 开发页面
● 基于原型或PRD(需求文档)
● 命名规范(参考阿里规约)
● 字段类型(合适类型—>根据存储的内容决定)
● 实体与实体之间的关系(主外键约束)
● 表设计没有不变的
4,部署测试环境
5,接口联调 —>前后端联调
6,测试 --> 提bug 专门的bug管理工具(禅道)
每个人都会开通一个禅道账号 个人修复bug以后,提交为 已解决———》 测试人员回归测试
7,部署正式环境
查看日志的命令
(1)tomcat查看实时日志
● 实时监控日志:
tail -f catalina.out
● 查询最后100行日志:
tail -n 100 -f catalina.out
(2)doeker容器实时查看日志
● 实时监控日志:
docker logs -f 容器id/容器名称
● 查询最后100行日志:docker logs -n 100 -f 容器id/容器名称
(3)查看日志文件
● 在test.log文件中搜索”exception”:cat -n test.log | grep “exception”
● 分页查看日志文件:more test.log
● 使用 >xxx.txt 将查询到的日志保存到文件中,可以下载这个文件分析
cat -n test.log |grep “debug” >debug.txt
通常的使用思路:先尝试监控实时日志,看看能不能监控到想要的信息,如果不能则需要查看日志文件,从海量日志信息中找出自己想要的错误信息。