美团Java后端(二)

链接:https://leetcode-cn.com/circle/discuss/GnF0OV/

  • 项目后台的 API 接口是怎么实现的

大概简单描述 (不确定行不行):

  1. 定义返回给前端的JSON体 

  2. 设计一个返回体类Result

  3. 在controller层处理业务请求,并返回给前端

需要用到的基本注解:

@RestController

@RequestMapping("/xxx")

@ResponseResult,表示这个接口返回的值需要包装一下

......

补充知识点:Restful接口理解

比如,我们有一个friends接口,对于“朋友”我们有增删改查四种操作,怎么定义REST接口?

增加一个朋友,uri: generalcode.cn/v1/friends 接口类型:POST

删除一个朋友,uri: generalcode.cn/va/friends 接口类型:DELETE

修改一个朋友,uri: generalcode.cn/va/friends 接口类型:PUT

查找朋友,uri: generalcode.cn/va/friends 接口类型:GET

上面我们定义的四个接口就是符合REST协议的,请注意,这几个接口都没有动词,只有名词friends,都是通过Http请求的接口类型来判断是什么业务操作。

举个反例:generalcode.cn/va/deleteFriends 该接口用来表示删除朋友,这就是不符合REST协议的接口。

  • TCP 和 UDP 的区别
  1. TCP提供面向连接的可靠服务 ,UDP提供无连接不可靠服务
  2. 对数据准确性要求不高,速度需要快的,实时的,可以选用UDP
  3. 对数据准确性要求高,速度可以相对较慢的,可以选用TCP
  • 为什么 TCP 是三次握手

“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。----这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致

  • 讲一下链表和栈的区别
  1. 栈是运算受限的线性表,其限制是允许在栈的一边进行增删操作,其它位置不可
  2. 不连续的储存空间,可以通过指针的前移后移实现数据访问
  3. 栈是一种数据结构,链表可以看成数据结构的一种实现
  • 什么场景下用栈比较合适
  1. 子程序的调用
  2. 处理递归调用
  3. 表达式的转换与求值

补充知识:队列使用场景

诸如线程池、数据库连接池之类的池资源都会使用到队列。

阻塞式地等待资源:公平地对待每一个请求,符合先进先出的特点,用队列。顺序队列和链式队列不同的作用。

  • 链式队列可以实现一个支持无限排队的无界队列,但是极有可能导致排队过多,请求被处理的时效非常长,所以,如果是针对响应时间要求高的系统,那么链式队列是不合适的;
  • 顺序队列则是有界的,当请求入队使得队列满了之后,后续的请求都会被拒绝,比较适合对响应时间要求高的系统。需要注意的是,顺序队列的大小设置需要按照实际的业务场景和并发量进行考究,太大容易导致排队请求过多,太小容易导致系统资源无法充分利用。
  • 用 Java 实现一个栈(数组 + pos + 扩容)

参考此博客

  • Java 内存模型
  1. 主内存: Java内存模型规定了所有变量都存储在主内存(Main Memory)中
  2. 工作内存: 每条线程都有自己的工作内存(Working Memory,又称本地内存),线程的工作内存中保存了该线程使用到的变量的主内存中的共享变量的副本拷贝。工作内存是 JMM 的一个抽象概念,并不真实存在

线程对变量的所有操作(读取,赋值)都必须在工作内存中进行。不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成,实现各个线程提供共享变量的可见性。

  • 一个 Java 对象在内存中的生命周期

创建阶段(Creation)、应用阶段(Using)、不可视阶段 (Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段 (Free)

参考:https://blog.csdn.net/kjfcpua/article/details/4062993?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-10.control&dist_request_id=1330147.8772.16180463576204295&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-10.control

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值