社招三年后端: AmberGroup二面2021.04.22

前言

这次大佬问的问题都是很多协议性的细节问题,基本上百分之八十都没去思考过.也没看过(后续会对每个协议做一些简单博客,对基础中间件开发应该是有帮助的)

1. http请求传值可以通过那些途径

urlpath、urlparam、header、body

2. http请求url传递大小、body传递大小限制

  1. http协议对url长度是没有限制的,服务器必须能够处理任何他们提供资源的URI,并且应该能够处理无限长度的URIS,如果服务器不能处理太长的URI的时候,服务器应该返回414状态码,表示URL过长(所以服务器端也是可以做长度限制的)
  2. URL长度限制是由不同浏览器自己限制的,不同浏览器对URL长度限制不一样.body也没有大小限制

3. http请求url后面参数a=x&a=y会选择那一条

  1. http协议中并没有规定同名参数的处理方法.具体处理方法是在服务端接收方,一般时取第一个为参数.
  2. 在Spring中当接收类型为String类型时会将值连接为以","分割开的字符串,如果是集合类型则会整理成元素放入集合中,否则取第一个为参数.

4. put请求参数放在哪里

put请求参数一般放在body中.当然如果是类似id这种可以放在params中或者url的一级地址上.RESTFUL风格中这个方式用来修改数据的,body在浏览器上没有传输大小限制

5. http客户端传递二进制流的contenttype是什么类型;body中是什么格式

  1. http请求头和响应头传输是ASCII文本类型,其中Content-type为传输消息体的类型.告知消息接收端如何解析消息体
  2. 定义传输body为文本信息解析格式(test/ html/json/xml/form表单)之类
  3. 还有一种是文件类型,表示该次传输是二进制流类型,如image/ .. ; video/ ..; application/ ..;之类的
  4. 所以body中的格式信息其实是由数据传输方和接收方自己定义的,可以选择将二进制进行编码后传输再由服务端解码(参考csdn头像上传),或者传输本身的二进制数据(浏览器F12会尝试使用utf-8解析,但是是乱码的,因为本身就不是UTF-8编码的二进制文件)

6. websocket关闭标签页会断开链接么,服务端如何判断是否断开连接了,服务端如何主动断开连接

websocket定义的是浏览器与服务端建立长连接的协议.具体连接创建是由浏览器来执行的,标签页只是浏览器中的一部分而已.所以标签页关闭是不影响连接的.但是标签页中有维护连接保持的心跳机制,所以当标签页关闭后不再进行心跳发送则会由服务端断开连接.

7. websocket心跳机制

  1. websocket由于要判断客户端与服务端是否还在线/离线来及时将连接断开释放资源保证不会因为连接导致的内存溢出问题.所以当连接创建后,会由客户端发送心跳,服务端响应心跳机制来让双方感知对方的存在.
  2. 这里规定客户端发送ping给服务端,服务端给客户端发送pong响应,确保双方的发送数据能力以及在线状态

8. rabbitmq和kafka实现单播和广播

  1. Rabbitmq的发布订阅/路由/通配符模式可以实现广播. 工作队列模式实现单播
  2. Kafka是基于发布订阅模型实现的消息队列,天生就是支持发布订阅的.所以同一队列多个partition多个不同组消费者就可实现广播, 单播的话就创建一个partition和一个消费者组就好了

9. mail发送邮件可否模仿他人邮箱发送

SMTP协议只定义邮件格式,身份验证是邮件服务商自己设置的.所以mail可以模仿他人邮箱发送,并且判断发送方真实性由各邮件服务商自己实现的

10. Git抛弃指定commit(回滚)

  1. 推荐git了解学习模拟网站oschina.gitee
  2. 本地工作区: 当前正在修改的内容.(在这步仅需 git checkout ./ -- filename;删除当前文件改动)
  3. 本地暂存区: 已add. git reset HEAD ./filename(这时会将改动再标记为在工作区)
  4. 本地仓库: 已commit. git reset --hard commitId

11. 算法题: 打印字符串全排列(力扣38)

// 回溯算法: 将不同的数字存放辅助数组中.并做好原数组取出数字标记.用完放回去;
// 最主要的就是向下递归的选择把握以及递归完毕对状态信息的回朔调整
public static String[] permutation(String s) {
    char[] origin = s.toCharArray();
    Set<String> result = new HashSet<>();
    fullArrangement(origin, "", result, new boolean[origin.length]);
    return result.toArray(new String[result.size()]);
}

// 每个位置按照不同的顺序将字符取出再放回,注意重复剪枝即可;
public static void fullArrangement(char[] origin, String s, Set<String> result, boolean[] visit){
    if(s.length() == origin.length){
        result.add(s);
        return;
    }
    // 记录当前数组存放内容以及访问过的元素
    for(int i = 0; i < origin.length; i++){
        if(visit[i]){
            continue;
        }
        visit[i] = true;
        fullArrangement(origin, s.concat(String.valueOf(origin[i])), result, visit);
        visit[i] = false;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
08-11 17:58
怎么感觉全世界都转码了
蜻蜓队长:其实很多转码的人本身是非常适合学计算机的,只是自己当年没选对专业😂
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
07-30 23:39
门头沟学院 Java
kulua:虾皮最后疯狂补录,完全不用担心
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务