前言

都知道MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

所以作为一名开发人员,掌握好MyBatis的使用是非常有必要的,特别是像阿里、腾讯等大厂都使用广泛,那么如何能够达到“精通”MyBatis的程度?今天就来好好谈谈。

下面简单介绍一下这份MyBatis源码笔记,每个章节都是深入解析了源码底层在PDF里边有。为了让大家更好的学习MyBatis技术,我也是第一时间展示给大家了!

1、上下文切换

上下文定义

cpu发生进程或者线程切换时,所依赖的数据集合,比如一个函数有外部变量,函数运行时,必须获取外部变量,这些变量值的集合就是上下文。

引发问题

对于CPU密集型任务,多线程处理会发生上下文切换,会影响到执行速度,如果时IO密集型,多线程技术优点尽显。

如何减少上下文切换

  • 无锁并发编程,锁的获取与释放会发生上下文切换,多线程时会影响效率。无锁并发编程就是将数据分块,每个线程处理各自模块。比如LongAdder中部分代码。
  • CAS算法,并发编程时通过CAS算法更新数据,而不必加锁。如Java的atomic包下的工具类。
  • 使用最少线程,减少不必要的线程创建,自定义线程池。
  • 使用协程,在单线程中维护多任务调度,处理任务间切换,Golang对于协程的使用很强大。

2、死锁

死锁定义

死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。
系统发生死锁现象不仅浪费大量的系统资源,甚至导致整个系统崩溃,带来灾难性后果。

产生死锁原因

  • 系统资源不足
  • 进程推进顺序不当
  • 资源分配不合理

死锁产生的必要条件

  • 互斥条件:一个资源只能被一个进程或者线程使用。
  • 请求和保持条件:一个进程或者线程,请求资源的时候发生阻塞,对已经获取的资源保持不放。
  • 不可剥夺条件:进程或者线程以获得的资源,在未使用完成时,不能强行剥夺。
  • 循环等待条件:若干进程或者线程形成一种头尾相接的循环等待的资源关系。

这四分条件是死锁产生的必要条件,只要发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

如何避免死锁

  1. 以确定的顺序获得锁
  2. 加锁时限

Lock接口提供了boolean tryLock(long time, TimeUnit unit) throws InterruptedException方法,该方法可以按照固定时长等待锁,因此线程可以在获取锁超时以后,主动释放之前已经获得的所有的锁。

结尾

这不止是一份面试清单,更是一种”被期望的责任“,因为有无数个待面试者,希望从这篇文章中,找出通往期望公司的”钥匙“,所以上面每道选题都是结合我自身的经验于千万个面试题中经过艰辛的两周,一个题一个题筛选出来再次对好答案和格式做出来的,面试的答案也是再三斟酌,深怕误人子弟是小,影响他人仕途才是大过,也希望您能把这篇文章分享给更多的朋友,让他帮助更多的人,帮助他人,快乐自己,最后,感谢您的阅读。

资料领取方式:戳这里免费获取

资料领取方式:戳这里免费获取

由于细节内容实在太多啦,在这里我花了两周的时间把这些答案整理成一份文档了,在这里只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!

Java技术图谱!java程序员面试题苹果瓣相关推荐

  1. 14个Java技术网站,程序员必备!

    先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员. 我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 程序员都是无师自通?这就有点 ...

  2. JAVA程序员面试题集合

    JAVA程序员面试题集合 分类: 编程语言 2012-12-08 12:10 50人阅读 评论(0) 收藏 举报 1.面向对象的特征有哪些方面 (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些 ...

  3. Java程序员面试题集(131-135)

    Java程序员面试题集(131-135) 摘要:这部分内容准备重新发布为Java程序员面试题集(151-180),但这篇帖子仍然保留在这里.查看新内容请点击Java程序员面试题集(151-180) 1 ...

  4. Java程序员面试题

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...

  5. java程序员语录_「java程序员面试题」2018java程序员面试题整理 - seo实验室

    java程序员面试题 1.@PathVariable注解和@requestParam注解的区别. @RequestParam注解是获取静态URL传入的参数 @PathVariable是获取请求路径中的 ...

  6. java 用程序代码解释继承_关于初级java程序员笔试题

    关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...

  7. 2017年java笔试题_初级java程序员笔试题

    Java认证考试是业界唯一经Sun授权的Java认证,考试内容涉及所有Java相关知识.编程概念及applet开发技巧.下面是小编整理的关于java初级程序员面试题,欢迎大家参考! 一:判断题 1.J ...

  8. 重磅:保姆级Java技术图谱发布!够学到元宵节了,赶紧收藏!

    最近因为参与社群交流的时间比较多,除了唠唠白酒的嗑之外,很大一部分时间都是看到群里问到一些关于Spring Boot和Spring Cloud应用过程中碰到的问题以及一些开发过程中的报错信息.在这些帮 ...

  9. java 书籍推荐 JavaEE程序员必读图书大推荐

    java 书籍推荐 JavaEE程序员必读图书大推荐 转自:http://www.cnblogs.com/xlwmin/articles/2192775.html 下面是我根据多年的阅读和实践经验,给 ...

最新文章

  1. 深入研究Clang(九) Clang代码阅读之打log读流程2
  2. Attention技术应用的最新进展概述
  3. php+header+跳转输出,php利用header跳转怎么失效了?
  4. 三星Galaxy S22 Ultra更多细节:采用Note系列外观因素
  5. php引入odbc模块,php如何用odbc调用存储过程?
  6. Mark Cuban投资组合中60%为BTC,30%为ETH
  7. zabbix 之 磁盘发现脚本
  8. dds通信中间件_车内的中间件协议:是面向服务,还是以数据为中心,或是RESTful?...
  9. Java加载Class文件的原理机制
  10. 动软代码生成器连接8.0.17版本的mysql
  11. Qt第一章:pyside6安装与配置
  12. 基于libmodbus库实现modbus TCP/RTU通信
  13. Quara 上一些有趣的问答
  14. OPPO小布推出预训练大模型OBERT,晋升KgCLUE榜首
  15. python心得总结知识点和收获,千锋Python培训学员心得 在总结中收获提升
  16. android sqlite 分词,sqlite3自定义分词器
  17. python制作收费_python分段计费demo
  18. 高通开发系列 - Unpacking Tools拆包工具的制作
  19. Python开发一个APP居然如此之简单?老王自学三月就独立开发了!
  20. 机器人之爱:为什么人与机器可以陷入浪漫的爱情?

热门文章

  1. win10系统的两台电脑之间局域网共享文件
  2. VC API常用函数
  3. wetest操作手册
  4. 记一次Module not found
  5. Itunes Store
  6. 前端搜索引擎优化(SEO)
  7. FCN全卷积网络理解
  8. 打开cad文件的几种方法
  9. 编写LitmusRT调度器插件
  10. 本地host管理推荐