🌈键盘敲烂,年薪30万🌈
个人简介:
大三在校生,二本院校,专业:信息管理与信息系统
面试岗位:
java开发实习生
投”简历“
临近大三寒假,很早就有实习想法的我,对12月做了一下规划,原本计划12月中旬着手为实习做准备,但在这之前,我打开招聘网站随便投递了几家公司,我是这样操作的:先是投了下简历,然后附上一句话,你好,贵公司有在招聘寒假实习生吗?(浪潮给我秒拒了>_<)有几个给了答复,其中有一个让我做笔试,笔试过了就可以约面试,实习薪资第一个月2500-99999,懂的都懂,这样的机会我指定不能放过啊,于是就有了我为期一天的准备。
面试流程:
在这说一下,笔试它给了一个项目,三天之内完成一个功能模块的开发,就是标准的CRUD,有手就行,通过笔试之后hr给我的消息是第二天10点腾讯会议面试。
我9点40进的会议,面试官9点55进来的,刚开始你真别说,声音很像黑马的李老师,面试官进来直奔主题,不多废话,我原本就很紧张,没有过多交流让我更紧张。
9点55开始的,10点08就结束了。
面试官:
xxx是吧,自我介绍一下、
我:
我是一名大三在校生,信息管理与信息系统专业,自学的java后端相关知识,想找一份与java开发的实习工作。
面试官:
嗯,有做过什么项目吗?
我:
有,跟着B站黑马视频做过瑞吉外卖,苍穹外卖。
面试官:
奥,外卖项目是吧,说一下项目中主要实现的功能。
我:
这里我说的很别扭,什么都没说出来,最后说了句项目中一些模块的功能开发都实现了一遍。
(其实面试之前应该对项目进行总结的,把面试官引导到你准备的问题上来,这里我啥也没说,把发挥空间留给了面试官)
面试官:
支付功能有没有???
我:
这部分功能没有实现,就比如苍穹外卖吧,它是微信小程序端的一个项目,它的支付功能需要申请商户号,支付成功后,微信服务器会调用后端服务器的一个paysuccess方法,我是自己手动修改数据库,模拟实现了一下订单支付。
面试官:
项目中有套餐模块是吧,我:对
面试官:
那如果套餐库存为0或者套餐下架业务逻辑是什么样呢
我:
套餐首先会关联菜品,当菜品处于起售的时候该套餐不允许下架,对于库存我的项目中好像没有涉及,(其实是有的)
面后整理的回答:
套餐库存为0的业务逻辑:
- 下单失败: 当用户下单时,系统可以检查套餐的库存,如果库存为0,则拒绝生成订单,返回给用户相应的提示,如“库存不足”或“该套餐已售罄”。
套餐下架的业务逻辑:
- 阻止下单: 当套餐下架时,用户下单时不会查询到已下架的套餐。
- 下架套餐: 关联菜品的套餐不能被下架
面试官:
如何保证操作多张表的时候数据一致性。
我:
操作多张表的时候,一般会在service层的方法上加上@transactional注解,当发生异常的时候,事务会回滚。
面试官:
什么情况可能导致事务异常??
我:
嗯,我想一下,如果程序抛异常了,就会导致事务异常,其他想不起来了。
面后整理的回答:
- 数据库连接问题: 如果在事务执行期间数据库连接发生问题,比如连接中断或数据库不可用,事务可能会失败。
- 违反数据库约束: 当尝试向数据库中插入、更新或删除数据时,如果违反了数据库的约束条件,如唯一性约束、外键约束等,事务将失败。
- 死锁: 当多个事务相互等待对方释放锁资源时,可能发生死锁。如果系统无法解决死锁,某些事务将被终止,导致异常。
- 超时: 事务执行时间超过了系统设置的最大时间限制,可能会导致事务异常。这通常是为了避免长时间运行的事务阻塞系统。
- 程序错误: 编程错误可能导致事务异常。例如,在事务中执行的代码中可能包含了错误,或者事务在执行期间遇到了意外情况。
- 并发问题: 在多用户并发访问的环境中,如果不正确地处理并发控制,可能会导致事务异常,如丢失更新、脏读等问题。
- 资源耗尽: 如果事务在执行期间请求的资源(如内存、文件句柄等)超出了系统的可用资源,可能会导致事务异常。
- 中断操作: 在事务执行期间,如果操作系统或硬件发生故障,或者系统被强制关闭,事务可能无法正常完成。
面试官:
springcloud有没有学过?
我:
没有,下一步正打算学springcloud
面试官:
springboot中哪里用到了反射机制
我:
(当时已潮)嗯嗯,(想了半天)能不能给点提示,我对反射这一块有点懵
面试官:
反射有没有了解过
我:
反射就是通过类的字节码文件操作里面的方法。
面试官:
哪springboot中哪里用打了反射
我:
嗷嗷,我想到一个,当bean属性注入的时候,一般使用setter注入,或者构造器注入,之后可以加@data注解体哦国内set方法,这里用到了暴力反射。
面试后整理回答:
依赖注入(Dependency Injection): Spring Boot 使用反射来实现依赖注入。在你的应用程序中,你可以使用
@Autowired
注解来注入依赖关系。Spring 通过反射来检查和设置注入的属性或构造函数参数。组件扫描: Spring Boot 通过扫描包路径来发现和注册组件(例如,
@Controller
、@Service
、@Repository
等)。这涉及到使用反射来检查类的注解和创建相应的对象。AOP面向切面编程: Spring Boot 使用 AOP 实现一些横切关注点,例如事务管理、日志记录等。AOP 在运行时通过代理生成机制,使用了反射来创建代理对象,并在方法执行前后织入横切逻辑。
动态代理: Spring Boot 中的一些特性,例如缓存、事务管理等,使用了动态代理。动态代理是通过反射在运行时创建代理对象的一种机制。
数据绑定: Spring Boot 中使用了数据绑定来将外部配置文件中的属性值绑定到 Java 对象上。这个过程中涉及到通过反射设置对象的字段。
BeanPostProcessor: Spring 框架中有一些接口,如
BeanPostProcessor
,允许在 bean 初始化前后进行处理。这涉及到使用反射来检查和修改 bean 的属性。
面试官:
hashtable与hashmap的区别
我:
(答得很臭)
hashtable和hashmap主要的别就是线程安全不安全,hashtable允许有null值,而hashmap,(忘了hashmap的null能不能有了,然后面试官接着就问了下一个问题)
整理:
- 线程安全性:
HashMap
是非线程安全的。多个线程可以同时访问HashMap
,但在多线程环境下,可能需要额外的同步措施来确保线程安全。Hashtable
是线程安全的。所有的方法都是同步的,这意味着在多线程环境下,多个线程可以安全地访问Hashtable
而不需要额外的同步手段。然而,这也导致了在性能上的一些损耗。
- 性能:
- 由于
Hashtable
的所有方法都是同步的,因此在单线程环境下的性能可能比HashMap
差。HashMap
是非同步的,因此在单线程环境下性能更好。在许多单线程的应用中,HashMap
往往是更好的选择。
- 允许null键值:
HashMap
允许键和值都为null
。Hashtable
不允许键和值为null
,如果尝试插入null
键或值,会抛出NullPointerException
。
- 继承关系:
HashMap
继承自AbstractMap
类,实现了Map
接口。Hashtable
继承自Dictionary
类,实现了Map
接口。
- 迭代器:
HashMap
的迭代器是快速失败的。在迭代过程中,如果有其他线程修改了HashMap
的结构(增加或删除元素),会抛出ConcurrentModificationException
异常。Hashtable
的迭代器不是快速失败的。由于所有方法都是同步的,因此在迭代时不会发生结构上的改变。
面试官:
那如何兼顾性能和线程安全呢?
我:
使用hashmap加synchronized关键字(直接凉凉~~)下面就是我的胡言乱语时间……
整理:
- 选择合适的集合类型:有些集合类型天生是线程安全的,例如
ConcurrentHashMap
,而有些则不是,如HashMap
。如果你需要线程安全性,选择相应的集合类型是首要考虑。- 使用不可变集合: 不可变集合是线程安全的,因为它们在创建后不能被修改。在多线程环境中,使用不可变集合可以避免许多线程安全性问题。
面试官:
git有没有用过 我:有,一直在用
面试官:
如何解决git中的冲突问题
我
先pull拉下来,然后合并,然后提交(答的也很臭)
整理:
获取最新代码:
git pull origin master
查看那些文件冲突
git status
打开冲突文件: 打开包含冲突的文件,你会看到类似如下的标记:
<<<<<<< HEAD // Your changes ======= // Incoming changes >>>>>>> branch_name
手动修改冲突文件:编辑文件,根据需要选择保留或合并修改。删除冲突标记和不需要的代码,留下你需要的变更。
add 到本地仓库
git add path/to/conflicted_file
merge合并文件
git merge -continue
commit push
git commit -m "xx" git push origin master
面试官:
好,你还有社么问题吗
我:
有点紧张,第一次面试,不知道答得怎么样
面试官:
人事在一到两周后会给你消息,(溜了~~)
我忘了和它说拜拜了~~
总结:
第一次面试时间很短,收获也一般吧,就感觉自己的技术还是不到位
springboot还是不行,原理,用到的技术都不熟练。