当前位置: 首页 > 面试经验 >

美团测开校招一面

优质
小牛编辑
82浏览
2023-08-28

美团测开校招一面

美团测开校招一面

2023年8月28日上午10点,美团测开校招一面,base 成都到店事业群。面了一个半小时,满头大汗的。

=======

当天下午2点打电话约29号晚上二面,速度还挺快的

1.谈一下接口和抽象类的理解。

2.访问控制符在接口和抽象类有什么异同?

​ 抽象类可以用private,public,default(默认)和protected,都可以作用在抽象类的抽象和非抽象方法,抽象和非抽象变量。

​ 在接口中,所有的方法都是public或者default的,如果方法是default的,则你需要给他实现。无法设置为protected和private,接口中所有的成员都是public static final的,你在定义的时候就必须初始化它。

3.接口和抽象类可以有静态方法或者变量吗?

​ 接口中可以有静态变量,而且接口中的变量就只能是public static final的,即默认就是静态的。

4.抽象类里抽象方法和非抽象方法可以同时存在吗?

​ 可以

5.解释一下对static和final的理解

6.一个类有一个成员变量,它的修饰符为public static final,请问它的值是在什么时候确定下来的呢?

7.static变量和非static变量初始化的时机是怎样的?

static变量都会在类第一次被加载到JVM(Java虚拟机)时初始化,非static变量在每次创建对象时进行初始化赋值

8.一个类的static变量和非static变量在内存中的位置是一样的吗?

​ 这里我回答错了,应该是

  • static变量存储在方法区,与类的生命周期相同,被所有实例共享。
  • 非static变量存储在堆中,与对象的生命周期相同,每个实例都有自己的副本。

9.谈一下编译时和运行时异常,举几个常见的运行时异常的例子

​ 运行时异常:

  • NullPointerException(空指针异常)
  • IndexOutOfBoundsException(数组下标越界异常)
  • ClassCastException(类型转换异常)
  • ArrayStoreException(数据存储异常,操作数组时类型不一致)

编译时异常:

  • IOException(IO异常)
  • SQLException(SQL异常)
  • ClassNotFoundException(类没有找到异常)

10.Arrays.asList(int[] arr)得到的list数组和我们一般使用的ArrayList数组一样吗?可以用同样的方法吗?如何正确转数组到list呢?

Arrays.asList()方法返回的ArrayList实例与常规java.util.ArrayList不同。这里返回的实例是Arrays类的一个内部类,它并没有实现add()remove()等修改集合大小的方法。因此,尝试调用这些方法会导致UnsupportedOperationException

该列表支持的主要操作包括:

  1. get(int index): 获取指定索引的元素。
  2. set(int index, E element): 修改指定索引的元素值。但是只能修改,不能添加或删除。
  3. size(): 获取列表大小。
  4. contains(Object o): 检查列表是否包含指定元素。
  5. indexOf(Object o): 返回指定元素的第一次出现的索引,或-1(如果列表不包含该元素)。
  6. lastIndexOf(Object o): 返回指定元素最后一次出现的索引,或-1(如果列表不包含该元素)。
  7. toArray(): 返回包含列表所有元素的数组。
  8. iterator(): 返回列表元素的迭代器。

以下是一些示例:

List<int[]> list = Arrays.asList(new int[]{1, 2, 3});
list.get(0);  // 返回 int[] {1, 2, 3}

// 抛出 UnsupportedOperationException
// list.add(new int[]{4, 5, 6});
// list.remove(0);

如果你使用int[]数组作为参数,需要注意的是,Arrays.asList()将整个数组视为单一元素,返回的列表实际上只有一个元素,即该数组。

总体而言,Arrays.asList()返回的列表主要用于对现有数组进行“视图级别”的操作,而不是作为通用的可变列表。如果你需要一个完全功能的ArrayList,应该使用其他方式来创建它,例如:

List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));

这样,list就是一个真正的ArrayList实例,支持add(), remove(), clear()等所有操作。

11.讲一下你对Java中的Collection接口的理解。

12.HashMap中的key和value可以为NULL吗?

​ 都可以为NULL,如果key为NULL的话,会把这个entry放在数组的第一个位置,即做特殊处理。

13.MySQL基本数据类型说一下

14.MySQL中DateTime和TimeStamp的使用场景?有何区别?

​ 这块答的不好,细节部分没有好好弄懂。

MySQL中的DateTimeTimeStamp都用于表示日期和时间,但它们有几个重要的区别,导致它们适用于不同的使用场景。

主要区别:

  1. 存储范围:DateTime: 从1000-01-01 00:00:00到9999-12-31 23:59:59TimeStamp: 从1970-01-01 00:00:01UTC到2038-01-19 03:14:07UTC
  2. 存储大小:DateTime: 占用8个字节TimeStamp: 占用4个字节
  3. 时区支持:DateTime是时区无关的,存储的时间值不会随数据库或系统时区的改变而改变。TimeStamp是时区敏感的,存储为UTC时间,当读取TimeStamp字段时,MySQL会将其自动转换为当前时区的时间。

使用场景:

  1. DateTime:当你想存储生日、节假日、特定事件的日期和时间时。当需要的日期范围超出TimeStamp限制(如历史日期或很远的未来日期)。当你不希望时间随系统时区改变而改变。示例:
  2. TimeStamp:用于记录事件发生的具体时间(如日志、修改时间等)。当需要存储时间,并且该时间需要随时区变化而自动调整。当空间是关注点,并且时间范围在TimeStamp允许的范围内。示例:

可能的问题:

  1. 时区问题:使用TimeStamp时,如果不正确地管理时区,可能会导致数据不一致。
  2. 范围限制TimeStamp有日期范围限制,不适用于存储早于1970年或晚于2038年的日期。

综上所述,DateTimeTimeStamp都有其合适的使用场景,选择哪个类型取决于你的具体需求。注意时区和范围限制,以避免未预见的问题。

15.SQL中DROP DELETE TRUNCAT的理解?

​ 它们的执行速度哪个最快(DROP > TRUNCAT > DELETE)?哪些会释放表的空间(DROP > TRUNCAT > DELETE)?

16.设计一下上传简历的设计用例,能想到多少就说多少。

17.Integer和String的比较问题

常见的Integer包装类缓存机制和String的字符串常量池,这个很多八股写的很细,这里就不写了。Integer缓存是-128~127,这个我回答错了。妈耶

​ 还有就是漏掉了一个细节,字符串常量池在方法区里,而new出来的String对象则是在堆上的。

18.如果HTTP请求上传文件时,上传的文件过大,会报什么样的错误码?

  1. 413 Request Entity Too Large:这是最直接相关的HTTP状态码,表明请求实体(在这种情况下是文件)太大,服务器无法处理。如果服务器是Nginx,你可能会在Nginx配置文件中看到client_max_body_size设置,该设置限制了HTTP请求体的最大尺寸。对于Apache,你可能需要设置LimitRequestBody指令。(最常见的)
  2. 400 Bad Request:虽然不是特定于文件大小,但某些情况下,服务器可能会简单地返回一个400错误,表示请求格式不正确。
  3. 504 Gateway Timeout408 Request Timeout:如果文件非常大,上传可能需要很长时间,从而导致超时。这并不直接与文件大小有关,但与文件上传的时间有关。
  4. 500 Internal Server Error:这是一个非特定的错误代码,表示服务器遇到了错误。虽然不太可能,但如果服务器没有正确配置来处理大文件,可能会出现这个错误。
  5. 502 Bad Gateway:如果你的应用程序使用了反向代理(如Nginx或Apache作为反向代理),且该代理未配置为支持大文件,你可能会看到这个错误。

19.介绍一下502、504错误码,并分别介绍一下它们发生的场景。

502 Bad Gateway

描述

"502 Bad Gateway"是一个HTTP状态码,表示一个服务器(不一定是Web服务器)作为网关或代理来操作,从尝试执行请求的上游服务器中接收到了一个无效的响应。

场景与举例

  1. 反向代理: 当你使用Nginx或Apache作为反向代理时,如果后端应用服务器(如Tomcat, Node.js服务等)未能返回有效响应或完全不响应,反向代理可能会返回502错误。比如,如果后端服务器崩溃了,或者因为配置问题无法接收请求。(见得最多的)
  2. 网络问题: 如果网络连接有问题,例如DNS解析问题或防火墙设置不当,也可能导致502错误。
  3. 负载均衡器: 在使用负载均衡器(如AWS的ELB)分发流量时,如果一个或多个后端服务器未能返回有效响应,负载均衡器可能会返回502错误。
  4. API请求: 当你的应用程序请求第三方API服务时,如果API服务未能返回有效响应,你的应用程序可能会收到502错误。比如,你有一个天气应用,依赖于一个天气API,但这个API服务暂时不可用。

504 Gateway Timeout

描述

"504 Gateway Timeout"是一个HTTP状态码,表示一个服务器(不一定是Web服务器)没有及时从上游服务器或某些其他辅助服务器收到请求所需的响应。

场景与举例

  1. 反向代理: 当你使用Nginx或Apache作为反向代理时,如果后端服务器未能在指定时间内返回响应,反向代理可能会返回504错误。例如,你有一个复杂的数据库查询需要几分钟才能完成,导致超时。
  2. 网络延迟: 网络传输延迟或分组丢失也可能导致504错误。例如,在高峰时段,网络拥堵可能导致请求或响应数据包被延迟或丢失。
  3. 负载均衡器: 同样,在使用负载均衡器时,如果所有后端服务器都太忙,不能在一个合理的时间范围内处理请求,负载均衡器可能会返回504。
  4. API请求: 当你的应用程序请求第三方API服务时,如果API服务由于某种原因(例如,服务器过载或内部错误)未能及时响应,你的应用程序可能会收到504错误。
  5. 长时间运行的操作: 如果你有一个需要长时间运行的操作,如大文件上传或复杂计算,而这个操作超过了服务器或代理设置的超时限制,你可能会遇到504错误。

这两种错误码通常需要服务器管理员进行调查和修复,但了解它们可以帮助开发者更好地设计和调试应用。

反问:

1.base成都

2.开发转测试需要学习什么呢?

​ 进去之后会有专门的培训和学习,有一系列的培养方案,不用太担心,美团测开招招的是综合开发岗,所以开发的技能也是要用上的,这边测开是以开发为主的。

3.到店SaaS的业务线有哪些?

​ 主要是to B的,比如扫码点单,POS机,商家供应链体系,业务线会比较多。

4.对我有什么建议?

​ 有一些问题答错了,很正常,后面补一下就好。

#美团##美团测开#
 类似资料: