大应科技 面经

1.自我介绍

2.自我介绍讲到了写的DB项目,问能不能看看我的项目。(这里时间有点久,大概有10多分钟了,大致讲讲)

  • 先让我看看SQL语句解析(我用的是简单的状态机,问我有没有SQL执行优化,我说这个有点难没有,他说这个其实是最核心的部分)
  • 让我讲讲项目的整体架构,(因为以前写readme画了架构图,开github顺着架构图讲了一遍)
  • 讲架构图的途中提到了我的事务实现,问我锁的问题,大致讲了一下如何实现读已提交,如何回滚,然后提到做了死锁检测回滚。问我怎么解决的,又给他看了张逻辑图,然后顺着代码讲了一下。(他一开始看不懂,我逻辑也有点乱,后来理了一下讲明白了)

3.开始八股,先问了静态类和非静态类有什么区别(底层的),然后问静态方法存储在哪里,没答上来,问我是不是没了解过jvm,我说还是了解了很多的,这一块不太懂(脑子短路了)。

4.问我聊不了解netty(因为我项目用了简单的netty实现的http通信),我说不是特别懂,只会简单的使用,就没继续问。(聊到这里以为凉凉了)

4.在浏览器中,如何输入www.taobao.com 到返回界面后发生了什么。(问题有点大,大致讲了一下dns然后tcp然后后端处理发送数据,浏览器生成界面,讲的不是很好吧)

5.问我如果再次访问同一个网站会有啥区别,说了浏览器或者nginx缓存静态页面,提了一嘴如果登陆过可能会携带cookie和token(主动引导)

6.讲一下session和cookie。(正合我意)

7.问进程通信(只答了共享内存,消息队列和管道)

8.场景题:每行一个多位整数,2个G的数据吗,给定一个整数,判断是否存在。想了很久,说了个字典树,(其实想让我说的应该是分治,面完研究了一下懂了),这题卡了好久,确实没想出来,主要有点没明白意思,我以为要从内存入手。结果是修改文件结构。

9.问我了解什么数据结构,提了策略模式,然后工厂模式,提了一嘴我的DB对类型的创建用了工厂,继续看我的代码讲了很多。

反问环节:

1.公司做什么的,回答没听懂,大概是大数据方向,个人理解是执行器优化,就是让每次查找更快速。有点懂前面问的问题和说的话了。聊了一会,最后问我什么安排,我说实习找工作,然后就结束了。

----------------------------------------

当天下午 约二面

二面全是聊项目 已OC

全部评论
"问我了解什么数据结构,提了策略模式,然后工厂模式",大佬是写错了嘛,这里两个不是设计模式嘛
点赞 回复 分享
发布于 2024-07-17 20:36 河南
那楼主还是有一点厉害的啊
点赞 回复 分享
发布于 2023-05-17 09:24 江西
聊的项目的那方面啊
点赞 回复 分享
发布于 2023-05-16 22:45 陕西

相关推荐

(自我介绍,略)#面试常问题系列#我:介绍项目,提到一些设计的改动就是你这边有提到状态的这弱一致性,那你这边怎么去理解弱一致性和强一致性?你有对这一块有了解吗?我理解,我这边看你还有使用 naocs,充当的部分是什么?是配置中心还是做那个服务发现这一块的能力?想问你的就是对于 Narcos 的 AP 和 CP 是怎么去配置的?然后你是怎么考虑这个 AP 和 CP 的?嗯,对这一块有了解吗?那如果我不用 MQ 的话,能不能实现这一套呢?就是我完全靠,比如说就只靠DB,我不需要 MQ 这样的一个中间件能不能实现同样的效果呢?(分布式事务)定时任务的频率你是怎么考虑的呢?如果是多节点呢?怎么考虑定时任务的同步协作那如果不想用分布式的引擎调度呢?(回答分布式锁)在设计这个分布式锁的时候会考虑到哪些东西?你这边对于定时任务的线程池的配置是怎么样的?如果数据量上来了之后,你定时任务超出了那个执行的时长的话,你是怎么考虑这个情况的呢Redis 常用的一些数据类型有哪些呢?比如 Redis 里面我要存一些对象列表,然后这些对象里面有一些属性,然后我需要对这些对象列表做分页、做搜索、做筛选。有这三个需求, Redis 能满足我,哪一个数据类型能满足我?或者是它这个数据类型的 API 能不能满足这一点?如果不满足的话,有没有其他的解决方案的你这一块提到了lua脚本的话,那如果这个 Lua 脚本很复杂的情况下,你是怎么做调试的边的话,我看你这边对 Java 并发编程这一块了解的比较多,你可以讲一下对于 Java 内存模型的一些理解吗?这边的理解我想我希更希望的是你能表达出这个内存模型,比如说我们都知道计算机硬件,对吧?都知道有CPU,对吧?有内存,多个线程会对这一块数据做进行操作的时候,为什么会有并发的问题?然后我们怎么从那个计算机的硬件角度上去理解它这样整体的一个过程?然后我们又是通过什么样的方式来解决这个问题的?然后我们再去了解这个过程,就是它是通过什么特性或者通过什么协议来保证的,然后或者是它这个协议其实际上原则上没有保证这一点,又是通过什么手段去解决这个问题的?你简单讲一下这边就是提及到两点,一个是 synchronize 的关键字,对吧?嗯,然后还有一个是 retrend lock 这一些对应的一些API,对吧?嗯,是的,然后你刚刚也提到 volatile 这一块的一个关键字,它只能保证内存的数据的一个可见性。那你这边,嗯,能深入聊一下,就是对于 volatile 这一块,它关键字实际上是怎么保证这个内存数据是可见的呢(答了字节码层面的标记变量) return lock 这一块,它你知道它背后它是怎么支持的吗?跟那个 synchronize 的区别是什么呢你理解的 return 的log,它实际上维护的是一个状态数据,这一块状态数据是在哪里存储的呢?使用 spring 事务过程中的时候是怎么使用它的?然后使用它的时候需要注意哪些方面?这些方面会有哪些隐患?说到了使用事务的时候会有你这个就是一开始定好的分布式锁的力度和事务所谓的力度并不一致的情况。那我如果想问一下,我在一个事务方法里面,它可能存在一些异步的一些代码,我可能就是比如说有些代码会去考虑到并行的情况,我想去提速的话,我需会遇到哪些问题?或者说这个问题能不能解决掉?其实想问的一点就是你理解的这一块的事物的数据,如果我们是用声明式的注解去做的时候,这一块事物的数据它是怎么存储的?您知道了解这一块吗?(懵逼,面试官解释了一下:它其实是跟着线程变量来的)就是你在使用这个事务过程中的时候,假如我们这边不用 d b 的事物去做了,然后那我能不能就是相当于我自己去实现套你这一套的事物的一个提交回滚?然后我可能不是放,不是用 DB 的那个statement, prepare statement 去做这一块事情的话,有没有其他的方式去做呢?比如说我把这个数据,就是这些事物的一些数据,因为我们这个东西肯定是存这个这些DB、 MySQL 或者 PG 它们引擎里面,它自己会去存这样的一个事务数据,对吧?它有对应的事务记录,那这个事物的记录你如果我把它迁移到,比如说就假设是一个开放性,等于,就比如说我放到 Redis 里面,那我在 Redis 里面应该怎么存?然后我怎么去用这一块的一个就是这一块的事务记录我是怎么交互的呢?比如说我想在 Java 里我不用 Sprint 事务了,我想自己实现一套AOP,然后这一块我该怎么去实现呢?(完全懵逼)我们实际上我们是有一些业务库和一些用专门用来做查询的一些库,我们是会分开的,就是写库和查库,我们实际上可能并不是统一到数据源,那我们是怎么保证这一块去做的呢?就是你会选择去做实时的时候,双写还是离线的方式去做,那离线去做的时候你又怎么去控制这一块的一个定时任务的频率的?对实时和离线这一块的选择会考虑哪方面的一些事情呢?就是为何选择实施?为什么要选择离线?你有想过这一点吗?(依旧懵逼)----------------------------------------------------------------------彻彻底底被拷打得体无完肤,最服气的一次,面试官人很好,答错时会给出一些解答和考察方向,打断的时候也很有礼貌
查看22道真题和解析 面试常问题系列
点赞 评论 收藏
分享
评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务