三七互娱 后端开发 0927
初面_2020-0927
1. 自我介绍
我的自我介绍改了很多版,现在这一版本是主要讲述自己的学习和实践经历的。
为自我介绍发愁的同学可以姑且参照一下我的自我介绍。
面试官你好,我是XXXXXX。
三月份开始,我开始积极准备面试,在学习知识的同时也会通过实践去巩固知识。
三月到四月,我学习了Web相关内容和SSM三大框架,并与SpringSecurity整合做了旅游网开发项目,对自己的学习进行一个阶段性检测。
五月到六月,学习了SpringBoot和SpringCloud两大框架,并做了简单的分布式学生管理系统,其中使用到了eruka,config,feign等相关组件。
七月,学校安排腾科对我们进行技术上的实训。我和同学共四个人一组,开发了酒店管理系统,期间使用git进行版本管理和线上多人合作,第一次采用vue+Springboot这种前后端分离的模式进行开发。
八月,我开始学习码云GVP里的优秀开源项目RuoYi,这是一个后台管理系统,提供了权限管理、自动代码生成和定时任务等功能。我深入源码级别进行代码实战操作及分析,编写自己的后台开发手册,期间针对项目代码提出问题并得到了作者的回复和修改。
在这半年来的学习时间,我也不断输出自己的学习笔记到码云和github上,慢慢的形成目录体系,已经有将近三十万字。经过我的积极分享,我的一些朋友也会一起学习,并且给我提出补充和修改的意见。
2. 性格介绍
由于我的自我介绍比较少的去介绍我的性格方面的特点,所以面试官希望我多多讲讲。
性格
好学,善于总结整理。对于专业知识的学习,我总是会寻找对应的方法方式,做一个比较好的计划,然后有规划的完成。我每天都会安排学习,并且记录在自己的学习日志中。除了专业知识,我还学习了烹饪和装修等很多生活的小技能。
善于分享,乐于助人。我个人是非常喜欢帮助他人,这样我会感到十分骄傲而且开心。作为班里的学习委员我会在考试前整理好课程笔记,分享给班里的人复习。包括我自我介绍说的我还发了很多学习笔记在github上,很多一起找工作的朋友就会一起学习。
宽容,真诚待人。在日常生活中,我很少大声讲话,也很少会对别人发脾气。甚至我在别人眼中,是一个适合倾诉的对象,也是因为如此,我有许多多年的好友,一直保持着比较好的关系。
兴趣爱好
基本上除了每天安排的学习之外,我最多的就是以下几种休闲方式。
运动健身。我接触的运动项目比较多,最多是篮球和羽毛球,少一点比如乒乓球和足球也会一些。现在办了健身卡,一般如果不是很忙的话会坚持三天去一到两次的。
打游戏。我比较经常打的游戏是英雄联盟和吃鸡,因为可以和朋友一起玩,也比较有兴趣。
和朋友聚会。这是我最喜欢的活动,和喜欢的朋友一起外出吃饭,或者其他聚会活动。我是一个不喜欢孤独,而非常喜欢热闹的人。
额外输出解决
由于提到了办健身卡,所以询问那这些额外的资金输出如何解决
我在大学期间一直都会有兼职的。
像很多活动的兼职,像做过电影院的王老吉的推广。还有一些有补贴的志愿者互动。
最多的话是做家教,包括大二在广州给小孩子做家教,疫情期间在家给邻居小孩子做家教。
赚的钱可以做自己想要做的事情,买自己以前想买但又舍不得的东西。
3. 大多数项目都有登录验证,那么输入密码之后有什么变化
首先,针对我的项目,在打开时会跳转到我的登录页面,这个页面是在安全框架中进行设置即可。
在输入框中输入账号密码,会调用后台对于数据库中的数据库密码进行比对。一般密码都是加密的,是用你输入的密码进行加密再和数据库中的已经加密的密码进行匹配的。
如果密码匹配不了,那么服务器会发出一个请求,我们的浏览器会跳转到设置好的失败页面,或者是重新刷新登录页面,重新登录。
如果密码和帐号匹配,那么服务器发回的Response字段会有一个set-cookie字段,给浏览器设置cookie,这样带有cookie的字段就可以带有身份信息对项目后续的功能进行正常访问。而服务器就会保存对应用户的信息到session中。
由于内存和安全的问题,现在比较少使用session传统方式进行认证,也就有了jwt等这些基于token的认证。
4. 刚才你说到jwt,你可以仔细讲讲吗
简单来说传统的session认证会有以下三个问题:
每次我们在应用认证之后,会在服务端做一次记录,为了方便一般都是记录在内存中,如果多个用户进行认证,就会导致服务端开销变大。
一般我们在服务器记录,就会记录在某一台服务器中,所以下次请求也应该在这台服务器上,那这样在分布式的应用上,就会限制了负载均衡的能力,也限制了应用扩展的能力了。
CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
流程:
用户使用用户名密码来请求服务器
服务器进行验证用户的信息
服务器通过验证发送给用户一个token
客户端存储token,并在每次请求时附送上这个token值
服务端验证token值,并返回数据
JWT构成:
header头部:一般包含一些声明信息,包括类型和加密算法。
playload载荷:存放有效信息的地方。一般放的是基本的信息,是谁发的签证,过期时间,接收方等等,加密,但是一般不放敏感信息,因为这部分在客户端可以解密。
signature签证信息:这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。这个盐相当于私钥,只能放在服务端,签证的分发也只能在服务端。
5. cookie和session是什么,有什么区别
cookie
- cookie是由Web服务器保存在用户浏览器上的文件(key-value格式),可以包含用户相关的信息。客户端向服务器发起请求,就提取浏览器中的用户信息由http发送给服务器
session
session 是浏览器和服务器会话过程中,服务器会分配的一块储存空间给session。
服务器默认为客户浏览器的cookie中设置 sessionid,这个sessionid就和cookie对应,浏览器在向服务器请求过程中传输的cookie 包含 sessionid ,服务器根据传输cookie 中的 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。
cookie与session区别
cookie数据存放在客户端上,安全性较差,session数据放在服务器上,安全性相对更高
单个cookie保存的数据不能超过4K,session无此限制
session一定时间内保存在服务器上,当访问增多,占用服务器性能,考虑到服务器性能方面,应当使用cookie。
6. 你学习java的路线是怎样,如何学习
首先我的学习路线大概就是我自我介绍中的内容了。
然后我是先从语言基础开始学习,然后学习了它的语言特性特征。
之后学习相关后台的技术栈,学到技术栈的时候有涉及其他的知识再一起学习,这是一个不断学习,然后在学习中扩展的过程。
展示我整理的技术栈:
7. Linux有没有接触,打算如何去学习
没有太多的接触。在之前有做过一个python的,有关神经网络的网站时,在linux上部署过改网站,部署之前有学习一些基本的linux命令。
我打算先复习一下linux的基本操作,然后学习脚本书写,只有再学习其权限或者文件和存储系统等核心知识点。
然后可以在linux上学习一些本来在windows上使用的工具之类的,比如Redis和docker等。
8. 我们主要是使用php和go,和你学习的有点出入,该如何去解决
首先语言只是一门工具而已,如果使用语言不同,我会在工作前把相关的基础语法和知识学习好。
其次我对我的自主学习能力非常自信,我相信我可以很好的快速的去把知识学习全,学习好。
最后我们除了语言不同,其实还有很多像操作系统,数据库,计算机网络方面的共同知识,所以在服务器开发方面是共通的。
9. 你之前学过python,那你觉得和java有什么不同
首先python是一门动态语言,所使用的变量不需要提前声明其类型,等到编译时再动态赋值。而且其作为一门工具,或者脚本语言,是非常优秀的。编写简单,代码量比较少,拥有强大的第三方库。而且在机器学习,科学计算,数据可视化等技术方面,python是非常有优势的。
而java由于是运行在虚拟机上的,所以它记保留了静态语言的运行快的特点,又有可移植性高的特点,而且java的API非常多,使用起来也是非常简单。在Web相关的开发中,它有着像Spring等非常优秀的框架,被大量运用。
之后介绍了公司的一些情况,然后还有公司的培训机制等等。
然后对我的建议是,还是可以更加完整的,思路清晰的回答,而且可能面对面试官还是要注意一下说话的方式。
#面经##三七互娱##校招##golang工程师#