二本仔
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,太依赖现在的集成开发环境也不好
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP