今天参加了的线上面试,然后不出意外的白给了。写篇博文记录一下值得记录的地方。
关于开发web技术选型时应该考虑的因素
说实话当面试官问出这个问题的时候哥们人都傻了,这个问题没有出现在我看过的任何面试记录上,硬着头皮说了一些,又感觉说的跟屎一样。回头总结,要考虑的因素包括但不限于:
项目类型和架构,是选择静态web还是动态web,静态web可选用的包括经典的Vue和React,MVC架构,动态如jsp和php
上市时间,上市时间关系到部署计划,react和vue这样的js框架和库对赶时间的开发任务是一个很好的选择,他们提供代码或组件的可重用性以节省时间
可扩展性和安全性,可扩展性意味着,如果你的应用程序将会有更多的用户群,或者它将会根据用户或业务需求提供更多的功能。因此,可以将这种用户基础和功能的增加称为纵向和横向增长。尝试采用有利于可扩展应用的技术,明智地选择基础设施,这样你就可以拥有一个防失败的架构。此外,安全性也是一个大问题。在45%的web应用程序中发现了不可靠的身份验证。因此,寻找复杂的授权和身份验证方法,可以保护你的web应用程序免受漏洞和可能的攻击媒介的影响。
发展预算,技术越先进,需要的预算就越多,这是经验法则。在web应用程序开发之前进行项目评估是非常重要的。此外,你可以在论坛上分享你的需求或要求,以了解所有的项目评估和未来范围。
详细资料
关于前后端分离和前后端不分离的区别
当时面试官问这个问题是因为我多嘴说自己大二那会学了jsp,然后他顺着jsp一直往下说,java和前后端不分离的项目我并不了解,我直接裂开……分离和不分离的区别我说了七七八八后,他抓着本质区别到底是什么一直往下问……
前后端分离是一种架构模式,说通俗点就是后端项目里面看不到页面(JSP | HTML),后端给前端提供接口,前端调用后端提供的 REST 风格接口就行,前端专注写页面(html|jsp)和渲染(JS|CSS|各种前端框架);后端专注写代码就行。
前后端分离的核心:后台提供数据,前端负责显示
前后端分离则可以很好的解决前后端分工不均的问题,将更多的交互逻辑分配给前端来处理,而后端则可以专注于其本职工作,比如提供API接口,进行权限控制以及进行运算工作。而前端开发人员则可以利用nodejs来搭建自己的本地服务器,直接在本地开发,然后通过一些插件来将api请求转发到后台,这样就可以完全模拟线上的场景,并且与后台解耦。前端可以独立完成与用户交互的整一个过程,两者都可以同时开工,不互相依赖,开发效率更快,而且分工比较均衡。
在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。
这种应用模式比较适合纯网页应用
详细资料
关于REST风格的接口
没想到最近接受的学院的项目他们后端用的就是REST风格,只是当时只顾着看需求文档,还怪他们的接口都写得云里雾里的,错过了学习的机会……我再次裂开。
REST是一套风格约定
关于URL,REST约定URL 中不应该出现任何表示操作的动词,链接只用于对应资源,URL 中应该单复数区分,推荐的实践是永远只用复数。一个 URL 应该用来定位资源,而不应该掺入对操作行为的描述(一个资源实体进行不同的操作就是一个不同的 URL,造成 URL 过多难以管理)。按照资源的逻辑层级,对 URL 进行嵌套,比如一个用户属于某个团队,而这个团队也是众多团队之一,那么获取这个用户的接口可能是这样:
GET /api/teams/123/members/234 表示获取 id 为 123 的小组下,id 为234 的成员信息
关于请求方法,在 REST 架构中,有以下几个重要的请求方法:GET,POST,PUT,PATCH,DELETE。这几个方法都可以与对数据的 CRUD 操作对应起来(不单单是POST和GET)。GET应当实现为一个安全方法。用于获取数据而不应该产生副作用(查),POST 是一个非幂等的方法,多次调用会造成不同效果(增),PUT和PATCH用于资源的更新(改),DELETE用于对资源的删除(删)。
关于分页和过滤,REST 风格的接口地址,表示的可能是单个资源,也可能是资源的集合;当我们需要访问资源集合时,设计良好的接口应当接受参数,允许只返回满足某些特定条件的资源列表,比如支持以 offset 和 limit 参数来进行分页:
GET /api/users?offset=0&limit=2
支持提供关键词进行搜索,以及排序:
GET /api/users?keyword=john&sort=age
支持根据字段进行过滤:
GET /api/users?gender=male
关于Token以及为什么要把用户登录和获取用户信息的接口分开写
token里面应该包含什么信息?如果包含除了敏感数据(如密码、真是姓名等),把剩下准备用作全局状态管理的数据都包含到token里返回给前端,这样做时无可厚非的。为什么登录和获取信息要分开写,因为在页面刷新的时候如果要保持状态不丢失,得用getMessage,我之前的项目里都是这么用的面试的时候给忘了!!!!!!!!!!我裂开。
其他零零散散
一个关于如何做布局的问题,我是没想到这么简单的东西都能被问倒我也不知道我自己在干什么,这个懒得总结。还有一个前端给后端传的数据格式都有哪些?我平时用的最多的就是json和二进制文件流,归根结底是关于Content-Type的,content-type一般只存在于Post方法中,可有以下取值:
application/x-www-form-urlencoded 浏览器原生的form表单,默认值
multipart/form-data 二进制文件流
application/json 用来告诉服务端消息主体是序列化后的 JSON 字符串
text/xml 它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范,用的比较少
总结就是,在没复盘之前我甚至有点侥幸,复盘完觉得体无完肤。很多自己认识的东西没答出来或者没答好,纯白给。刚才写到一半发现又收到了腾讯今晚的笔试,笔试也没把握。
人生海海,失败是主旋律。好好笔试。
关于typeof和对象实例的关系等
不出意外的话今晚又白给了。复习的没考到,考的全是之前会的现在没记起来的。不说太多。
typeof
对一个值使用typeof操作符会返回下列字符串之一:
undefined:值未定义
boolean:布尔值
string:字符串
number:数值
object:对象或者null
function:函数,注意typeof Object返回function,因为此时Object被认为是构造函数
symbol:符号
instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上
function A() {}
const a = new A()
console.log(a instanceof A) // true
还被问到了怎么判断一个变量是数组实例还是数组字面量,属实没头绪。