美团测开校招一面
美团测开校招一面
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
。
该列表支持的主要操作包括:
get(int index)
: 获取指定索引的元素。set(int index, E element)
: 修改指定索引的元素值。但是只能修改,不能添加或删除。size()
: 获取列表大小。contains(Object o)
: 检查列表是否包含指定元素。indexOf(Object o)
: 返回指定元素的第一次出现的索引,或-1(如果列表不包含该元素)。lastIndexOf(Object o)
: 返回指定元素最后一次出现的索引,或-1(如果列表不包含该元素)。toArray()
: 返回包含列表所有元素的数组。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中的DateTime
和TimeStamp
都用于表示日期和时间,但它们有几个重要的区别,导致它们适用于不同的使用场景。
主要区别:
- 存储范围: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
- 存储大小:DateTime: 占用8个字节TimeStamp: 占用4个字节
- 时区支持:DateTime是时区无关的,存储的时间值不会随数据库或系统时区的改变而改变。TimeStamp是时区敏感的,存储为UTC时间,当读取TimeStamp字段时,MySQL会将其自动转换为当前时区的时间。
使用场景:
- DateTime:当你想存储生日、节假日、特定事件的日期和时间时。当需要的日期范围超出TimeStamp限制(如历史日期或很远的未来日期)。当你不希望时间随系统时区改变而改变。示例:
- TimeStamp:用于记录事件发生的具体时间(如日志、修改时间等)。当需要存储时间,并且该时间需要随时区变化而自动调整。当空间是关注点,并且时间范围在TimeStamp允许的范围内。示例:
可能的问题:
- 时区问题:使用
TimeStamp
时,如果不正确地管理时区,可能会导致数据不一致。 - 范围限制:
TimeStamp
有日期范围限制,不适用于存储早于1970年或晚于2038年的日期。
综上所述,DateTime
和TimeStamp
都有其合适的使用场景,选择哪个类型取决于你的具体需求。注意时区和范围限制,以避免未预见的问题。
15.SQL中DROP DELETE TRUNCAT的理解?
它们的执行速度哪个最快(DROP > TRUNCAT > DELETE)?哪些会释放表的空间(DROP > TRUNCAT > DELETE)?
16.设计一下上传简历的设计用例,能想到多少就说多少。
17.Integer和String的比较问题
常见的Integer包装类缓存机制和String的字符串常量池,这个很多八股写的很细,这里就不写了。Integer缓存是-128~127,这个我回答错了。妈耶
还有就是漏掉了一个细节,字符串常量池从Java7开始就移到堆里了,不是方法区或者元空间里。
18.如果HTTP请求上传文件时,上传的文件过大,会报什么样的错误码?
- 413 Request Entity Too Large:这是最直接相关的HTTP状态码,表明请求实体(在这种情况下是文件)太大,服务器无法处理。如果服务器是Nginx,你可能会在Nginx配置文件中看到
client_max_body_size
设置,该设置限制了HTTP请求体的最大尺寸。对于Apache,你可能需要设置LimitRequestBody
指令。(最常见的) - 400 Bad Request:虽然不是特定于文件大小,但某些情况下,服务器可能会简单地返回一个400错误,表示请求格式不正确。
- 504 Gateway Timeout 或 408 Request Timeout:如果文件非常大,上传可能需要很长时间,从而导致超时。这并不直接与文件大小有关,但与文件上传的时间有关。
- 500 Internal Server Error:这是一个非特定的错误代码,表示服务器遇到了错误。虽然不太可能,但如果服务器没有正确配置来处理大文件,可能会出现这个错误。
- 502 Bad Gateway:如果你的应用程序使用了反向代理(如Nginx或Apache作为反向代理),且该代理未配置为支持大文件,你可能会看到这个错误。
19.介绍一下502、504错误码,并分别介绍一下它们发生的场景。
502 Bad Gateway
描述
"502 Bad Gateway"是一个HTTP状态码,表示一个服务器(不一定是Web服务器)作为网关或代理来操作,从尝试执行请求的上游服务器中接收到了一个无效的响应。
场景与举例
- 反向代理: 当你使用Nginx或Apache作为反向代理时,如果后端应用服务器(如Tomcat, Node.js服务等)未能返回有效响应或完全不响应,反向代理可能会返回502错误。比如,如果后端服务器崩溃了,或者因为配置问题无法接收请求。(见得最多的)
- 网络问题: 如果网络连接有问题,例如DNS解析问题或防火墙设置不当,也可能导致502错误。
- 负载均衡器: 在使用负载均衡器(如AWS的ELB)分发流量时,如果一个或多个后端服务器未能返回有效响应,负载均衡器可能会返回502错误。
- API请求: 当你的应用程序请求第三方API服务时,如果API服务未能返回有效响应,你的应用程序可能会收到502错误。比如,你有一个天气应用,依赖于一个天气API,但这个API服务暂时不可用。
504 Gateway Timeout
描述
"504 Gateway Timeout"是一个HTTP状态码,表示一个服务器(不一定是Web服务器)没有及时从上游服务器或某些其他辅助服务器收到请求所需的响应。
场景与举例
- 反向代理: 当你使用Nginx或Apache作为反向代理时,如果后端服务器未能在指定时间内返回响应,反向代理可能会返回504错误。例如,你有一个复杂的数据库查询需要几分钟才能完成,导致超时。
- 网络延迟: 网络传输延迟或分组丢失也可能导致504错误。例如,在高峰时段,网络拥堵可能导致请求或响应数据包被延迟或丢失。
- 负载均衡器: 同样,在使用负载均衡器时,如果所有后端服务器都太忙,不能在一个合理的时间范围内处理请求,负载均衡器可能会返回504。
- API请求: 当你的应用程序请求第三方API服务时,如果API服务由于某种原因(例如,服务器过载或内部错误)未能及时响应,你的应用程序可能会收到504错误。
- 长时间运行的操作: 如果你有一个需要长时间运行的操作,如大文件上传或复杂计算,而这个操作超过了服务器或代理设置的超时限制,你可能会遇到504错误。
这两种错误码通常需要服务器管理员进行调查和修复,但了解它们可以帮助开发者更好地设计和调试应用。
反问:
1.base成都
2.开发转测试需要学习什么呢?
进去之后会有专门的培训和学习,有一系列的培养方案,不用太担心,美团测开招招的是综合开发岗,所以开发的技能也是要用上的,这边测开是以开发为主的。
3.到店SaaS的业务线有哪些?
主要是to B的,比如扫码点单,POS机,商家供应链体系,业务线会比较多。
4.对我有什么建议?
有一些问题答错了,很正常,后面补一下就好。
#美团##美团测开#