首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
破做题家
获赞
72
粉丝
2
关注
5
看过 TA
14
蚌埠坦克学院
2023
后端
IP属地:广东
暂未填写个人简介
私信
关注
拉黑
举报
举报
确定要拉黑破做题家吗?
发布(32)
评论
刷题
收藏
破做题家
关注TA,不错过内容更新
关注
2022-09-08 16:56
已编辑
蚌埠坦克学院 后端
数据库三大范式
第一范式 1NF 属性/字段有原子性,不可再分。 例如表:字段1--学号 | 字段2 --姓名(字段2.1--姓,字段2.2--名,字段2.3--曾用名) | 字段3--性别 这样就不符合第一范式 第二范式 2NF 在满足1NF的基础上。要求所有属性都必须完全依赖于主键。 例如表:学号 | 姓名 | 课程号 | 学分 这里课程号和学分与学号没有依赖关系,主键和属性不相关,所以不符合2NF。 可能产生的问题: 数据冗余:例如一个学生选了多门课,本只需要记录学生id,课程id即可,但是此时要多次姓名和课程学分。 删除异常:例如删除学生的选课记录,则学生信息和课程信息都删了 插入异常:一个没选...
0
点赞
评论
收藏
分享
2022-09-08 15:59
已编辑
蚌埠坦克学院 后端
MySQL binlog解析和使用
binlog:二进制日志,记录数据更改的语句。因此记录了所有DML(数据操作语言,即增删改查)和DDL(数据定义语言,即create、alter、drop等),但是不记录select、show。也不记录DCL(数据库控制语言,即授权、取消权限等) MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。 binlog使用场景 主从复制:MySQL Replicati...
0
点赞
评论
收藏
分享
2021-05-02 02:51
蚌埠坦克学院 后端
JAVA并发编程之线程的状态和方法
线程的状态 初始状态 实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。 就绪状态 就绪状态意味着线程处于可执行的状态,但是并未真正执行。要等到调度程序选到就绪的线程,线程才会真正占用CPU,执行。 进入就绪状态的几种情况: 调用线程的start()方法 当前线程的sleep()方法结束 当前线程调用其他线程的join()方法,其他线程运行结束时,当前线程进入就绪状态 等待用户输入,输入完毕时 线程拿到了对象锁 线程时间片用完了 线程调用yield()方法 运行中状态 线程调度程序从就绪的线程中选择一个线程进入运行状态。这也是线程进入运...
0
点赞
评论
收藏
分享
2021-05-01 16:34
已编辑
蚌埠坦克学院 后端
深入理解MVCC及其在innoDB中的实现
MVCC简述 阅读本文前我们需要了解脏写、脏读、不可重复读、幻读 以及事务的隔离级别。 在处理多线程读写时,为了保持数据的一致性以及满足事务的各种隔离级别,我们可以通过加锁的方式实现。然而加锁必然导致并发度、效率降低。为了解决这个问题出现了MVCC(多版本并发控制)。正如其名,MVCC就是通过保存记录的多个版本(即保存在不同时间点中记录的快照),可以在不加锁的条件下,实现不阻塞地并发读写操作,且保持数据的一致性。 本文将介绍MVCC的innoDB实现。网上关于这方面的文章很多,基本分为两个版本的说法,两个说法大相径庭,让笔者一段时间内甚是困惑——到底MVCC是怎么被innoDB实现的?下面进行...
0
点赞
评论
收藏
分享
2021-04-27 15:40
已编辑
蚌埠坦克学院 后端
深入理解事务的特性及事务的隔离级别
事务的特性 事务可以理解成一组对数据库的操作,而这一组操作满足一定的特性,所以被称为事务。事务有4个特性,简称ACID。 A:原子性 一个事务要么全部执行成功提交,要么全部失败回滚,不存在只成功执行事务中的一部分操作,而有些操作没被执行。即事务中的所有操作是不可分割的,这就是事务的原子性。 C:一致性 一个事务的执行不能破坏数据库的一致性。一个事务在执行之前和执行之后,数据库都必须处于一致性状态。根据上述的定义实际上对于一致性的理解是很模糊的。数据库的一致性指的是数据库处于“正确的状态”。也就是事务的一致性是保证数据库必须从一个正确的状态到另一个正确的状态。但是“正确的状态”应该是由用户定义的...
0
点赞
评论
收藏
分享
2021-04-26 18:39
已编辑
蚌埠坦克学院 后端
脏写、脏读、不可重复读、幻读
本文将介绍数据库脏写、脏读、不可重复读、幻读的概念。这些概念是了解数据库中事务隔离级别、MVCC多版本并发控制的基础。 脏写 脏写即写了修改后未提交的记录。例如:A修改一个值,未提交,紧接着B也修改这个值,此时A回滚。结果是事务A的undo日志记录了A修改的值的原始值,并回滚到A修改前的状态。因此,在B看起来就是自己修改了值却没有变化,明明修改了却和没改似的。 脏读 脏读即读到了修改后未提交的记录。例如:A修改一条记录,还没提交;此时B读到A修改的值;然后A回滚。结果是B再读读到了修改前的值。 不可重复读 不可重复读即在事务执行的先后读到的值“不一样”。但这和脏读是不同的。例如:B读一条记录,...
0
点赞
评论
收藏
分享
2021-04-26 18:14
蚌埠坦克学院 后端
JAVA中的Map
HashMap HashMap类在之前的文章有较为详细的介绍,作为最常用的Map数据结构,了解HashMap也是了解JAVA中其他Map的基础。 HashTable HashTable是一个遗留类,现较少使用。使用单线程使用Map结构一般使用HashMap,多线程则使用ConcurrencyHashMap。不过可以通过了解HashTable了解到为什么它被淘汰以及对在并发编程中线程安全与效率的安全性的进步。下面从HashTable与HashMap的对比了解HashTable。 线程安全HashMap是线程不安全的类,多线程下会造成并发冲突,但单线程下运行效率较高;HashTable是线程安全...
0
点赞
评论
收藏
分享
2021-04-25 23:52
已编辑
蚌埠坦克学院 后端
JAVA并发编程之Lock
Lock与Synchronized 在前面章节已经介绍了Synchronized锁与并发编程中的关键概念 。JAVA多线程同步的实现还可以通过Lock来实现,Lock与Synchronized的区别有: Synchronized是JAVA关键字,底层是靠JVM调用对象的monitorenter与monitorexit指令实现的。而Lock不是关键字,是JDK1.5后新增的类,通过这个类实现多线程的对共享区域的同步访问。 Synchronized可以自动释放锁,就算出现了异常JVM也能确保锁能够被释放。Lock则必须手动释放锁。 Synchronized是不可中断锁。而Lock是可中断锁。可中...
0
点赞
评论
收藏
分享
2021-04-25 13:07
已编辑
蚌埠坦克学院 后端
JAVA并发编程之volatile
JMM内存模型 在了解Volatile之前,需要先了解JMM内存模型,在前面的文章中已经做了较为详细的描述。 Volatile关键字的语义 保证可见性 被Volatile修饰过的变量被一个线程修改后,新值对其他线程而言立即可见。例如下列代码: //线程1 boolean stop = false; while(!stop){ doSomething(); } //线程2 stop = true;代码的本意是用线程2来完成线程1的中断。但是并非一定能成功。每个线程在运行过程中有自己的工作内存,线程1在运行的时候,会将stop变量的值拷贝一份放在自己的工作内存当中。当线程2更改了stop...
0
点赞
评论
收藏
分享
2021-04-25 02:23
蚌埠坦克学院 后端
JAVA并发编程之锁的类型区分
无锁 无锁即乐观锁,在上一篇博客中有介绍到。无锁是通过CAS实现的,线程认为共享区域总是读多于写,因此不会对共享区域加锁。而在需要对共享区域变量进行更新时,使用CAS操作。 自旋锁 自旋锁多线程访问共享区域的时间都很短,因此当一个线程获得了共享区的锁,其他线程在企图进入共享区时,不会进入阻塞状态,而是进行“自旋”的操作,即可以理解成原地循环等待。这样做的好处是,当锁被一个线程占用的时间很短的时候,自旋的操作可以省去其他线程阻塞、唤醒的开销,大大提升效率。但如果其它线程占用锁的时间很长,那么自旋的线程只会白白消耗处理器资源,而不会做任何有用的工作,反而带来性能上的浪费。自旋的默认次数是10次,用...
0
点赞
评论
收藏
分享
2021-04-25 08:57
已编辑
蚌埠坦克学院 后端
想问个问题,轻量级锁是自旋锁吗?
轻量级锁采用CAS操作,是不是就是一种自旋锁?
0
点赞
评论
收藏
分享
2021-04-24 23:57
已编辑
蚌埠坦克学院 后端
JAVA并发编程之synchronized
synchronized介绍与使用 synchronized即是通过对代码块/普通方法/静态方法加锁以保证多线程访问共享变量区域时“串行化”。下面介绍synchronized修饰不同对象的使用与区别。 普通方法 synchronized修饰普通方***将整个对象锁住。使得对象内别的被synchronized修饰的普通方法也无法被其他线程访问。下面展示几种情况的例子。1. public class synchronizedTest implements Runnable { //共享资源 static int i =0; /** * synchronized 修...
0
点赞
评论
收藏
分享
2021-04-25 12:00
已编辑
蚌埠坦克学院 后端
JAVA并发编程之核心概念(JMM内存模型、Happens-Before原则等)
线程安全 简单来说,线程安全是为了保证在多线程工作时,不会因为多个线程的执行顺序没有符合一定的逻辑依赖而造成意想不到的结果。《深入理解JAVA虚拟机》中对线程安全如下定义:“多个线程访问同一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替运行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获取正确的结果,那这个对象是线程安全的。”产生线程不安全的原因可以总结为:主内存和线程工作内存数据不一致、重排序。下文将阐明两个因素是如何造成线程不安全的、及其解决方案。 JMM内存模型与数据不一致问题 在JAVA运行时数据结构中我们对JAVA虚拟机的内存模型有初...
0
点赞
评论
收藏
分享
2021-04-24 11:25
蚌埠坦克学院 后端
JAVA三种List(ArrayList、Vector、LinkedList)详解与对比
ArrayList ArrayList是一个数组队列,相当于动态数组,使用连续的内存空间。ArrayList线程不安全。 ArrayList构造方法 默认构造函数,使用此函数构造默认大小是10. ArrayList()指定容量的构造函数,capacity是ArrayList的初始容量大小。当由于增加数据导致容量不足时,容量会增加上一次容量大小的一半,也就是扩容至原来大小的1.5倍。 ArrayList(int capacity)创建一个包含collection的ArrayList。 ArrayList(Collection<? extends E> collection)Array...
0
点赞
评论
收藏
分享
2021-04-24 00:35
已编辑
蚌埠坦克学院 后端
JAVA IO(传统IO、NIO)
普通IO流 JAVA普通IO流总图如下所示:总的来说,可以从以下几个方向进行分类: 按传输单位分:字节流、字符流1字节=8bits,1字符=2字节。字节流以字节为单位传输,即每次读取(写出)一个字节,字符流则按字符为单位传输。而一个中文占一个字符(两个字节),所以以字节流传输中文的时候会出现乱码,字符流则不会。 按传输方向分:输入流、输出流输入:从外部到程序的方向;输出:从程序到外部的方向。 按功能分:节点流、处理流节点流:从一个地方读、或向一个地方写的流处理流:对一个已存在的流进行包装,调用这个已存在的流进行读写。而处理流的作用则是可以在被包装的流的基础上增加一些独有的功能。字节流 输入字...
0
点赞
评论
收藏
分享
1
2
3
创作者周榜
更多
关注他的用户也关注了:
牛客网
牛客企业服务