2024-04-08
广州xxx公司面经(已上市)
✨终于有时间搞出来这个面经了,前一段时间一直在忙租房,今天刚租下来,呼,打工生涯就此开始了。
1.你的OJ在线判题系统是怎么保证系统安全的?✨
(自我介绍的时候挖的坑,面试官跳进来了哈哈哈,这说明自我介绍还是需要精心设计的)
这个系统的安全设计是有一个迭代的过程的。一开始我是使用守护线程、黑白名单、等代码层面来保证安全的。但是我觉得这种不够安全,因为黑白名单想要概括所有的程序,人工成本太高了。然后我就使用了第二种方案,使用java安全管理器,这是一个jdk中提供的类,我们需要继承SecurityManager类,然后在方法里限制用户的行为,最后在执行用户代码时,java指令的参数中带上这个实现类的路径即可。第二种方案确实能够控制用户的行为,但在控制用户的读权限时,我发现,用户要执行的代码获取不到Java核心类库中的类了。所以这个读的粒度也很难控制。然后就到了第三种方式,直接创建一个容器,将用户要执行的代码放到容器中执行,并搭配Java安全管理器,即使用户把容器搞挂了,我们重新创建一个就是了。
2. Java的三大特性✨
封装、继承、多态
3. 如何理解多态✨
(这个问题当时只想到了解耦这一个理解)
1. 多态是通过 “=”号右边的运行时类型来实现的,即可以将一个子类对象赋值给“=”号左侧的编译时类型变量引用。
2. 动态绑定:在多态状态下,对于方法的调用是动态绑定的,即在运行时根据对象的实际类型确定调用的方法。
3. 解耦:降低模块之间的依赖关系,使得模块可以独立地修改、扩展和重用。
4. 重写和重载的区别?✨
重写:通常发生在子类中,子类重新定义或实现父类/接口中的方法,要保证返回值类型、形参、方法名都与父类中的一致。
重载:通常发生在同一个类中,可以定义多个重名方法,但形参必须不一致。
5. 将 List<Teacher> 按照 Theacher 中的 age 属性进行分组,分组为Map<Integer, Teacher> 使用“Stream流”和“循环”两种方式(手写)。✨
说实话,没想到真会让人手写代码,但还好leetcode写的多,一些api还记得,所以两种方式都写出来了,但是stream流的方式写错了一点,hr说没关系,小错误,我知道你用过就行。
6. 给你 Teacher、Student、Homework 三对象,存到数据库里,最少需要多少张表?✨
一开始我答得5张,因为想着老师布置一个作业,这一个作业多学生都是一样的,所以学生与作业之间也是n : n,加上老师跟学生是 n : n,那一共就要两个连接表,三个实体表。但面试官说每个学生的作业不一样,因为他们的完成状态不一样,所以学生跟作业之间是1 : n,最后答案是4张表,想了想好像也有道理。
7. 手写sql,左连接查询学生年龄为18的所有作业✨
写出来了,完全凭的记忆,因为也很久没写sql了,一直用的mybatisplus
这次面试7个问题,除了第一个,剩下的一点都没沾上我准备的60道面试题,都是非常基础的,所以每问一个问题我都像从脑子底部,把答案挖出来一样,真的是完全靠过硬的基础,所以说兄弟们,不要光背八股文,最重要的还是基础,有时间练练手写代码跟sql,太依赖现在的集成开发环境也不好
35
0
分享
操作
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
