专栏首页每日面试我要18K,能过吗?
原创

我要18K,能过吗?

1、项目都有那些功能?

介绍了最近的这个项目自己所负责的几个核心功能,重点讲了其中一个技术的选型和实现等。然而他并没有接着问我项目上的问题。

2、spring框架AOP讲解一下吧!

AOP面向切面编程,是对OOP的补充。可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

主要有以下操作:

日志记录,跟踪,优化和监控; 事务的处理; 持久化; 性能的优化; 资源池,如数据库连接池的管理; 系统统一的认证、权限管理等; 应用系统的异常捕捉及处理; 针对具体行业应用的横切行为等。

在spring中的体现还有常见的五种通知:

  1. 前置通知:在目标方法执行之前执行执行的通知。
  2. 环绕通知:在目标方法执行之前和之后都可以执行额外代码的通知。在环绕通知中必须显式的调用目标方法,目标方法才会执行,这个显式调用时通过ProceedingJoinPoint来实现的,可以在环绕通知中接收一个此类型的形参,spring容器会自动将该对象传入,注意这个参数必须处在环绕通知的第一个形参位置。(环绕通知需要返回返回值,否则真正调用者将拿不到返回值,只能得到一个null。)
  3. 后置通知:在目标方法执行之后执行的通知。在后置通知中也可以选择性的接收一个JoinPoint来获取连接点的额外信息,但是这个参数必须处在参数列表的第一个。
  4. 异常通知:在目标方法抛出异常时执行的通知。(可以配置传入JoinPoint获取目标对象和目标方法相关信息,但必须处在参数列表第一位。另外,还可以配置参数,让异常通知可以接收到目标方法抛出的异常对象。)
  5. 最终通知:是在目标方法执行之后执行的通知。

通知常见场景:

AOP对应的代理模式:

动态代理,主要涉及的包就是java.lang.reflect包下面的两个类,Proxy和InvocationHandler,其中InvocationHandler是一个接口,可以通过实现该接口来定义横切的逻辑,并且通过反射的机制调用目标类的代码,动态的将横切的逻辑和业务逻辑整合在一起。这是动态代理的优点,但是它也有不足的地方,就是只能为接口创建代理实例,而没有通过接口定义业务方法的类,这就需要使用到Cglib代理了。

CGLib底层采用的是字节码的技术,全称:Code Generation Library。CgLib可以为一个类创建一个子类,在子类中采用方法拦截的技术拦截所有父类方法的调用并顺势织入横切逻辑。

也就是说:

JDK动态代理是面向接口的。

CGLib动态代理是通过字节码底层继承要代理类来实现(如果被代理类被final关键字所修饰,那么抱歉会失败)。

使用方面应该注意一些地方:

如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spirng默认采用JDK动态代理实现机制);

如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理。

性能比较:

  1、CGLib所创建的动态代理对象在实际运行时候的性能要比JDK动态代理高不少,有研究表明,大概要高10倍;   2、但是CGLib在创建对象的时候所花费的时间却比JDK动态代理要多很多,有研究表明,大概有8倍的差距;   3、因此,对于singleton的代理对象或者具有实例池的代理,因为无需频繁的创建代理对象,所以比较适合采用CGLib动态代理,反正,则比较适用JDK动态代理。

上面提到了jdk动态代理是由反射机制进行实现的,在讲解的过程中也可以提及对应的反射概念。

以上基本是我在讲解AOP过程中所提及的点,面试后又对此做了反思和总结,在回答过程中可以根据实际情况结合在项目中实现,这样会更好。

3、spring框架的事务?

编程式事务:编程式事务管理办法允许您管理与编程的源代码的帮助下事务。这就给了极大的灵活性,但它难以维护。

声明式事务:通过配置来进行管理。

故此,我们在工作中一般使用声明式事务进行实现。

xml文档中写入:

<!--开启事务的注解配置驱动-->    <tx:annotation-driven transaction-manager="transactionManager"/>

在service层中的待配置方法上加上注解“@Transactional”,表示该方法被设定为一个事务,只读默认为false,事务传递方式默认为required(有事务就加,无事务自己创建,用于增删改),可设定service类上加上“@Transactional”则对该类下全部方法生效。而对于其中的特例——查寻,可以单独配置“@Transactional(readOnly = true,propagation = Propagation.SUPPORTS)”。(supports为有事务就用,无事务就不用,用于查寻)。

事务:

事务是一个完整的工作单元,一个出错则进行回滚操作。故而事务有以下特性。

原子性:(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用

一致性:(Consistency)一旦事务完成,不管成功还是失败,系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 隔离性(Lsolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。

持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。这样就能从任何系统崩溃中恢复过来,通常情况下,事务的结果被写到持久化存储器中。

4、MySQL的隔离级别。

(1)Read Uncommitted(读取未提交内容)

A可以读取到B还未提交的事务。

(2)Read Committed(读取提交内容)

A只能读取到B已经提交的事务。并且A事务中两次读到的内容不一致,原有就是B提交事务。

(3)Repeatable Read(可重读)

A只能读取到B已经提交的事务。并且A事务中两次读到的内容一致,A事务结束后再读取会读取到B提交事务。

(4)Serializable(可串行化)

A事务未提交,B事务就等待。

产生的问题:

脏读:读到了还未提交事务的数据;

幻读:两次事务读到的数据不一致。中间有新事务提交;

不可重复读:一次事务中不允许多次读,会发生数据不一致。中间有新事务提交。

5、类加载的过程?

加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,类的加载过程必须按照这种顺序进行,而解析阶段则不一定,它在某些情况下可能在初始化阶段后在开始,因为java支持运行时绑定。

6、Tomcat 怎么实现不同应用的Jar 包不冲突?

关于依赖冲突解决方式有三种:最短路径原则、声明优先原则、依赖排除。在没有手动进行依赖排除的情况下,会依据最短路径原则、声明优先原则来选择jar包。关于依赖冲突排查可借助如maven-enforcer-plugin 与Maven Helper 插件。根据实际情况及环境,选择组合最优的解决方案解决依赖冲突问题。

7、看过什么书,学习了那些技术?

《编写高质量代码改善Java程序的151个建议》、《阿里巴巴开发手册》:提高了编程的质量;

《Java并发编程实践》:提供了开发过程中同一问题更多的解决思路,重点在并发方面;

《大话设计模式》、《设计模式之禅》:提高了自己代码以及对项目的架构思维。

大家注意采坑哦!很有可能让大家具体的来讲解一番。

其他问题:

1、说一下一次完整的http 请求的过程;

2、数据库优化,sql 优化讲一下;

3、什么是组合索引;

4、分布式锁是怎么实现的;

5、阻塞和同步的区别;

6、Java 动态加载过程,什么时候动态加载,底层怎么实现的;

7、TCP 怎么实现流量控制和拥塞避免;

8、TCP 拥塞避免是每次拥塞后发送窗口都自动再从1 开始吗?

9、final 关键字的用法;

10、springcloud,springboot,微服务有了解吗?

11、lambda 表达式了解嘛,有用过吗?

12、讲一下线程池的优点,讲一下线程池的分类和使用场景;

13、volatile 和sychronized 关键字的作用;

14、sychronized 可以修饰什么,可以修饰静态方法和静态代码块吗?

15、还了解其他的锁吗,简单介绍一下。

当天进行了两轮长达近4个小时的面试,然后紧接着还聊了聊个人规划、期望薪资,还有想问的问题等,又给我讲了讲公司目前的项目组、项目情况。

上面的问题基本都回答上来了,最少讲解了一下概念。我沟通了18K,看最后聊的情况感觉有戏,心里忐忑啊!期待能过,公司平台、福利啥的还都不错。

祝福我吧!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FPGA设计心得(11)关于FIFO IP核使用的一点注意事项

    FIFO?还是FIFO IP核?这也需要写总结吗?太容易了吧。如果我是一个正在处于面试找工作中的年轻人,肯定关注的是如何手撕FIFO,这也是当时校招时候干过的事...

    Reborn Lee
  • 选择 25k 的 996 还是 18k 的 965

    最近的 996.ICU 话题持续在火爆,一般热点新闻的热度持续时间为一星期,这次是程序们的集体发声导致,戳中了很多人的心声,继而热度不减。

    良月柒
  • 选择 25k 的 996 还是 18k 的 965

    最近的 996.ICU 话题持续在火爆,一般热点新闻的热度持续时间为一星期,这次是程序们的集体发声导致,戳中了很多人的心声,继而热度不减。

    良月柒
  • 那些年,我们用并行遇到的坑01

    背景:今天测试某一体机产品时,在性能压力测试部分,发现产品手册给出的测试用例,在有关并行度的操作中缺失了一些细节,而这很可能让经验不足的人无法高效的进行测试。 ...

    Alfred Zhao
  • Fundebug前端JavaScript插件更新至1.7.1,拆分录屏代码,还原部分Script error.

    1.7.1拆分了录屏代码,BUG监控插件压缩至18K,另外我们还原了部分Script error,帮助用户更方便地Debug。请大家及时更新哈~

    Fundebug
  • 我能赢吗

    在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和达到 100 的玩家,即为胜者。

    你的益达
  • 并行,想说爱你不容易 5.1 RMAN多通道但未用到并行5.2 备份语句改写使用到并行5.3 备份方式改变提高效率

    本文以Oracle数据库为例,说明在计算机的世界里,如果能用好并行这件利器,可以大幅提升性能;如果没用好,轻则达不到预期性能,重则会连带影响到整个系统的可用性,...

    Alfred Zhao
  • 现在前端都会Vue,你凭什么张口就要18K

    这几年前端圈面试流行一个段子,说能不能拿到高薪,就看能不能唬住面试官,唬住就要50K,唬不住就要5K。

    闰土大叔
  • java工资多少 程序员薪资很高吗

    北京程序员平均工资是12715 元,和此相差无几的是上海、深圳。达内是专业做精英程序员人才招聘的。据调查可知:在工作年限上,3-5年的工程师平均薪酬是20K上下...

    java架构师
  • select * 和 select 所有字段的区别

    之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解。

    良月柒
  • 1003 我要通过!(20)

    时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN,...

    指点
  • 1003. 我要通过!(20)

    “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案...

    AI那点小事
  • 我们真的需要JWT吗?

    JWT(JSON Web Token)是目前最流行的认证方案之一。博客园、各种技术公众号隔三差五就会推一篇JWT相关的文章,真的多如牛毛。但我对JWT有点困惑,...

    kklldog
  • 月薪1万的程序员纠结是否去月薪5千的创业公司,网友:脑子进水了

    在大公司里过着朝九晚五的生活,每个月拿1万的月薪。还是去创业公司奋斗一把,但是每个月工资只有5000块钱。你会怎么选择?最近一名大厂的程序员就遇到了这样一个问题...

    一墨编程学习
  • 【PAT乙级】我要通过!

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 学弟问我:explain 很重要吗?

    哈喽,小伙伴们好呀。我是狗哥,今天打算跟大家聊聊一个很基础的 MySQL 命令 —— explain。这个命令相信很多小伙伴都熟悉并且几乎每天都会使用,反正我是...

    一个优秀的废人
  • 我们真的需要8K电视吗?

    原文:https://www.techradar.com/news/do-we-really-need-8k-tvs-yet

    用户1324186
  • 有了OpenDaylight,我们还需要ONOS吗?

    这又是一道新的选择题。 当然,这样的选择题充斥着整个电信行业从辉煌走向衰落的全过程,那就是标准之争:有了标准就有了一切,输掉了标准就输掉了整个产业。 在传统的I...

    SDNLAB
  • 我还需要和我的猫一起发文章吗?

    早年一个学术界的段子一直让我印象深刻,有一些作者独立完成了自己的工作,却囿于投稿杂志的陈规,无法只写一个作者,无(愉)奈(快)间(地)加上了自己的猫,或者邀请其...

    生信技能树

扫码关注云+社区

领取腾讯云代金券