自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 数据库三大范式

2. 历史快照、历史数据的需要在现实生活中,我们经常需要一些冗余信息,比如订单中的收货人信息,包括姓名、电话和地址等。一般做业务的时候,要在满足需求的时候尽量,减少冗余,可以进行反范式化,但是会使表的存储空间变大,如果一个表的冗余字段进行修改另一个表也需要进行修改,否则会造成数据不一致。第二范式:主要是针对主键是由多个属性组成的联合主键,也就是在第一范式的基础上保证,不存在非主属性对主键的部分依赖。第三范式:在满足二范式的前提下,不存在传递依赖,像a依赖于b,b依赖于c,则a依赖于c的情况。

2024-07-23 16:58:45 299

原创 SQL语句基本规则

一般生产环境下不建议使用select*进行查询,因为使用通配符*虽然可以减少输入查询语句的时间但是获取一些不需要的列会降低查询和所使用应用程序的效率。数据控制语言:grate(授权)rollback(回滚)commit(提交)一般指事务操作 revoke(回收用户权限)注意一般distinct关键字会将后面的所有字段的组合进行去重,所以一般啊只要加在要去重的关键字上就可以。数据定义语言:一般指对表的操作:create (创建) drop(删除)alter(修改)必须写在form后面。

2024-07-19 19:16:18 265

原创 JAVA虚拟机运⾏时数据区域

虚拟机的多线程是通过线程轮流切换、分配处理器执⾏时间的⽅式来实现的,在任何⼀个确定的时刻,⼀个处理器(⾏时常量池,运⾏期间也可以将新的常量放⼊池中,这种特性被开发⼈员利⽤得⽐较多的便是。每⼀个⽅法被调⽤直⾄执⾏完毕的过程,就对应着⼀个栈帧在虚拟机栈中从。,多数虚拟机实现出于实现简单、存储⾼效的考虑,很可能会要求连续的。堆既可以被实现成固定⼤⼩的,也可以是可扩展的,不过当前主流的。的内存区域,如果从分配内存的⻆度看,所有线程共享的。是⼀块较⼩的内存空间,可以看作是当前线程所执⾏的。此内存区域的唯⼀⽬的就是。

2024-07-14 00:21:32 841

原创 HashMap和TreeMap的区别?

的实现,线程非安全,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,key不能为null,因为null没有实现comparable。HashMap采用链地址的哈希表,无序的。有序散列表,实现SortedMap 接口。也有modCount。

2024-07-11 00:09:41 67

原创 ConcurrentHashMap底层实现原理

输入参数initialCapacity是ConcurrentHashMap的初始化容量,loadfactor是每个segment的负载因子,在构造方法里需要通过这两个参数来初始化数组中的每个segment。,之所以不会读到过期的值,是根据java内存模型的happen before原则,对volatile字段的写入操作先于读操作,即使两个线程同时修改和获取volatile变量,get操作也能拿到最新的值。扩容的时候首先会创建一个两倍于原容量的数组,然后将原数组里的元素进行再。

2024-07-11 00:08:43 498

原创 解决:Please tell me who you are. Run git config --global user.email “you@example.com“ git config...】

我们可以通过前面生成的git仓库里的config文件里加入。但是有时候每次提交不成功,这里给大家介绍一个方法。一般这个问题出现在commit提交时候。这样再次提交commit便可以成功了。接着commit提交。希望对大家有所帮助。

2024-07-09 23:42:13 69

原创 数据库各级模式的形成过程

3.逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式。2.概念设计阶段:形成独立于机器特点,独立于各个DBMS产品的概念模式。4.物理设计阶段:根据DBMS特点和处理的需要,进行物理存储安排,(将E-R转换成表,根据范式设计表,表结构设计尽量简单、小)1.需求分析阶段:综合各个用户的应用需求。

2024-07-09 22:35:28 114

原创 TCP/UDP

FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

2024-07-09 19:47:47 113

原创 数据库系统的设计步骤

通过对用户需求进行综合、归纳与抽象,形成一个独立于具体DBMS的概念模型(DBMS数据库管理系统,如MySQL)为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)运用DBMS提供的数据语言、工具及宿主语言,根据逻辑设计和物理设计的结果。将概念结构转换为某个DBMS所支持的数据模型,对其进行优化。建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。是整个设计过程的基础,是最困难、最耗费时间的一步。准确了解与分析用户需求(包括数据与处理)是整个数据库设计的关键。

2024-07-09 19:46:47 133

原创 MySQL 5.7新特性?

generated column是MySQL 5.7引入的新特性,所谓generated column,就是数据库中这一列由其他列计算而得。MySQL 5.7版本提供了更为简单SSL安全访问配置,并且默认连接就采用SSL的加密方式。MySQL数据库从5.7.8版本开始,也提供了对JSON的支持。

2024-07-09 19:42:04 94

原创 MySQL中InnoDB的MVCC?

update操作提交之前,不能影响已有数据的一致性,所以不会改变旧的数据,update操作会被拆分成insert + delete。MVCC允许数据具有多个版本,这个版本可以是时间戳或者是全局递增的事务ID,在同一个时间点,不同的事务看到的数据是不同的。而对于读操作而且,只能读到在其之前的所有的写操作,正在执行中的写操作对其是不可见的。,具体的规则是将删除版本号小于当前系统版本的行删除,这个过程叫做purge。delete:将要删除的行的删除版本号设置为当前系统的版本号。,填入的是事务的版本号,这个。

2024-07-09 19:41:07 123

原创 MySQL页锁?

表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许。页级,表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。,仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行。:引擎 INNODB , 单独的一行记录加锁。

2024-07-09 19:39:51 100

原创 数据库的悲观锁和乐观锁

具体可通过给表加一个版本号或时间戳字段实现,当读取数据时,将version字段的值一同读出,数据每更新一次,对此version值加一。当我们提交更新的时候,判断当前版本信息与第一次取出来的版本值大小,如果数据库表当前版本号与第一次取出来的version值相等,则予以更新,否则认为是过期数据,拒绝更新,让用户重新操作。1、排它锁,当事务在操作数据时把这部分数据进行锁定,直到操作完毕后再解锁,其他事务操作才可操作该部分数据。1、如果有人在你之前更新了,你的更新应当是被拒绝的,可以让用户重新操作。

2024-07-09 19:39:11 197

原创 如何解决死锁?

死锁的条件:互斥、持有并等待、资源不可被剥夺、循环等待(p0等待p1资源,p1等P2,p2等p0)2.进程在申请新的资源时,释放已占有的资源。后面若还需要它们,则需要重新申请。1.进程在申请资源时,一次性得请求他所需要的所有资源。若无法满足则不能执行。预防死锁-破坏四个必要条件之一(但代价大(影响程序效率),不太可行)3.将系统中的资源顺序编号,规定进程只能依次申请资源。(动态检测资源分配,确保“循环等待”条件永远不成立)它将用到的最大资源;算法确保系统处于safty状态。(Deadlock)的著名算法。

2024-07-08 23:30:13 123

原创 接口与抽象类的区别?

因为所有枚举类都继承自java.lang.Enum(由编译器添加),同时java不支持多继承(已经自动继承了一个)。枚举类也无法被继承。枚举类中可以有自己的构造函数,可以实现接口的方法。接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。抽象类可以在不提供接口方法实现的情况下实现接口。

2024-07-08 23:28:32 165

原创 重写与重载的区别?

例子: 在父类中是public的方法,如果子类中将其降低访问权限为private, 那么父类在实现多态时如果调用子类的这个重写方法,但是这个方法已经是private,没有办法调用,所以就无法实现多态了。重写方法不能抛出新的异常或者比被重写方法声明的检查异常更广的检查异常。普通方法重载是动态绑定,方法调用是通过:实例对象引用.方法。2、方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。,返回值可相同可不同,作用域可相同可不同,方法重载有静态方法重载和普通方法重载。

2024-07-08 23:27:32 99

原创 Zookeeper 有哪些应用场景?

此场景下,znode 用于消息存储,znode 存储的数据就是消息队列中的消息内容,SEQUENTIAL 序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必担心队列消息丢失的问题。命名服务是指通过指定的名字来获取资源或服务的地址,利用zk创建一个全局的路径,即时唯一的路径,这个路径就可以作为一个名字,指向集群中机器或者提供服务的地址,又或者一个远程的对象等。已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和 Master 一样,编号最小的获得锁,用完删除,依次方便。

2024-07-08 23:22:59 586

原创 Zookeeper 是什么?

ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。因此,随着 Zookeeper 的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。客户端的读请求可以被集群中的任意一台机器处理,如果读请求在节点上注册了监听器,这个监听器也是由所连接的 Zookeeper 机器来处理。所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,即整个集群要么都成功应用了某个事务,要么都没有应用。顺序一致性(有序性)

2024-07-08 23:17:48 301

原创 JVM的类加载过程

JVM(Java Virtual Machine)的类加载过程是Java程序运行时非常重要的一部分,它负责将编译后的Java类加载到内存中,并对这些类进行初始化、链接和验证。类加载过程主要分为加载(Loading)、链接(Linking)和初始化(Initialization)三个阶段。(3)初始化 :执行类构造器(不是常规的构造方法),为静态变量赋初值并初始化静态代码块。解析:将常量池中的符号引用(如类的全限定名)解析为直接引用(类在实际内存中的地址)验证:验证字节码文件的正确性。

2024-07-07 16:58:33 339

原创 如果可达性分析算法判定为不可达对象,就一定必须死吗?

级的Finalizer线程去执⾏它们的finalize()⽅法。finalize()中成功拯救⾃⼰——只要重新与引⽤链上的任何⼀个对象建⽴关联即可,譬如把。可达性分析后发现没有与GC Roots相连接的引⽤链,那它将会被第⼀次标记,随后进⾏。放置在⼀个名为F-Queue的队列之中,并在稍后由⼀条由虚拟机⾃动建⽴的、低调度优先。即使在可达性分析算法中判定为不可达的对象,也不是“⾮死不可”的,这时候它们暂时还。处于“缓刑”阶段,要真正宣告⼀个对象死亡,⾄少要经历。次机会,稍后收集器将对F-Queue中的对象进⾏。

2024-07-07 16:29:28 186

原创 什么是引用?

首先"引用"(Reference)通常指的是一种数据类型或者数据结构中的元素,它提供了对另一个变量或对象的间接访问。引⽤的存在,完全不会对其⽣存时间构成影响,也⽆法通过虚引⽤来取得⼀个对象实例。为⼀个对象设置虚引⽤关联的唯⼀⽬的只是为了能在这个对象被收集器回收时。的定义,是指在程序代码之中普遍存在的引⽤赋值,即类似。,但是它的强度⽐软引⽤更弱⼀些,被弱引⽤关联。,它是最弱的⼀种引⽤关系。对引⽤的概念进⾏了扩充,将引⽤分为。只被软引⽤关联着的对象,在系统将。软引⽤是⽤来描述⼀些还。弱引⽤也是⽤来描述那些。

2024-07-07 16:28:21 274

原创 垃圾收集(Garbage Collection, 简称GC)需要完成的三件事情:

因此这⼏个区域的内存分配和回收都具备确定性, 在这⼏个区域内。,在⼤多数情况下它都是⼀个不错的算法。虑,必须要配合⼤量额外处理才能保证正确地⼯作,譬如单纯的引⽤计数就很难解决。始节点集,从这些节点开始,根据引⽤关系向下搜索,搜索过程所⾛过的路径称为。引⽤计数算法虽然占⽤了⼀些额外的内存空间来进⾏计数,但。,栈中的栈帧随着⽅法的进⼊和退出⽽有条不紊地执⾏。的内存管理⼦系统,都是通过可达性分析算法来判定。,譬如各个线程被调⽤的⽅法堆栈中使⽤。零的对象就是不可能再被使⽤的。对象,⼀些常驻的异常对象。

2024-07-07 16:18:52 289

原创 HotSpot虚拟机对象探秘

须在对象数据上保留类型指针,换句话说,查找对象的元数据信息并不⼀定要经过对象本。同宽度的字段总是被分配到⼀起存放,在满⾜这个前提条件的情况下,在⽗类中定义的变。如果没有,那必须先执⾏相应的类加载过程,在类加载检查通过后,接下来虚拟机。将为新⽣对象分配内存。数组的⻓度是不确定的,将⽆法通过元数据中的 信息推断出数组的⼤⼩。,⽆论是从⽗类继承下来的,还是在⼦类中定义的字段都必须记录起来。部分是对象真正存储的有效信息,即我们在程序代码⾥⾯所定义的各种类。,这并不是必然存在的,也没有特别的含义,它仅仅起着占位。

2024-07-07 09:22:25 342

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除