摘要: 数据完整性(Data Integrity)是指数据的精确(Accuracy)和可靠性(Reliability)。 分为以下四类: 1、实体完整性:规定表的每一行在表中是惟一的实体。 2、域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括 取值范围、精度等规定。 3、参照完整性:是指 阅读全文
posted @ 2020-06-21 15:28 咔啡 阅读(1189) 评论(0) 推荐(0)
摘要: 先说什么是交叉连接: 交叉连接又叫笛卡尔积,它是指不使用任何条件,直接将一 个表的所有记录和另一个表中的所有记录一一匹配。 内连接 则是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合 条件的记录不会出现在结果集中,即内连接只连接匹配的行。 外连接 其结果集中不仅包含符合连接条件的行,而 阅读全文
posted @ 2020-06-21 15:20 咔啡 阅读(2177) 评论(0) 推荐(0)
摘要: SQL 语言包括数据定义(DDL)、数据操纵(DML),数据控制(DCL)和数据查询(DQL)四个部分。 数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index 等 数据操纵:Select ,insert,update,delete, 阅读全文
posted @ 2020-06-21 14:45 咔啡 阅读(456) 评论(0) 推荐(0)
摘要: 主键、外键和索引的区别 定义: 主键–唯一标识一条记录,不能有重复的,不允许为空 外键–表的外键是另一表的主键, 外键可以有重复的, 可以是空值 索引–该字段没有重复值,但可以有一个空值 作用: 主键–用来保证数据完整性 外键–用来和其他表建立联系用的 索引–是提高查询排序的速度 个数: 主键–主键 阅读全文
posted @ 2020-06-21 14:43 咔啡 阅读(272) 评论(0) 推荐(0)
摘要: NULL 这个值表示 UNKNOWN(未知):它不表示“”(空字符串)。对 NULL 这 个值的任何比较都会生产一个 NULL 值。您不能把任何值与一个 NULL 值进行比 较,并在逻辑上希望获得一个答案。 使用 IS NULL 来进行 NULL 判断 阅读全文
posted @ 2020-06-21 14:42 咔啡 阅读(5764) 评论(0) 推荐(0)
摘要: (1) 视图能够简化用户的操作 (2) 视图使用户能以多种角度看待同一数据; (3) 视图为数据库提供了一定程度的逻辑独立性; (4) 视图能够对机密数据提供 安全保护。 阅读全文
posted @ 2020-06-21 14:40 咔啡 阅读(764) 评论(0) 推荐(0)
摘要: 基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。 视图是从一个或几个基本表导出的表。 视图本身不独立存储在数据库中,是一个虚表 阅读全文
posted @ 2020-06-21 14:34 咔啡 阅读(846) 评论(0) 推荐(0)
摘要: 第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解; 第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性; 第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来, 它要求字段没有冗余。。 范式化设计优缺点: 优点: 可以尽量得减少数据冗 阅读全文
posted @ 2020-06-21 14:32 咔啡 阅读(742) 评论(0) 推荐(0)
摘要: 存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需 创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次 SQL, 使用存储过程比单纯 SQL 语句执行要快。可以用一个命令对象来调用存储过程。 阅读全文
posted @ 2020-06-21 14:29 咔啡 阅读(871) 评论(0) 推荐(0)
摘要: 死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成 的一种互相等待的现象,若无外力作用,它们都将无法推进下去。 产生死锁的必要条件: 1、互斥条件:所谓互斥就是进程在某一时间内独占资源。 2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3、不剥夺条件:进 阅读全文
posted @ 2020-06-21 14:27 咔啡 阅读(729) 评论(0) 推荐(0)
摘要: 多线程会共同使用一组计算机上的 CPU,而线程数大于给程序分配的 CPU 数量时, 为了让各个线程都有执行的机会,就需要轮转使用 CPU。不同的线程切换使用 CPU 发生的切换数据等就是上下文切换。 阅读全文
posted @ 2020-06-21 14:26 咔啡 阅读(158) 评论(0) 推荐(0)
摘要: java 中的线程分为两种:守护线程(Daemon)和用户线程(User)。 任何线程都可以设置为守护线程和用户线程,通过方法 Thread.setDaemon(bool on);true 则把该线程设置为守护线程,反之则为用户线程。Thread.setDaemon() 必须在 Thread.sta 阅读全文
posted @ 2020-06-21 14:24 咔啡 阅读(214) 评论(0) 推荐(0)
摘要: Executors 工具类的不同方法按照我们的需求创建了不同的线程池,来满足业务的需求。 Executor 接口对象能执行我们的线程任务。 ExecutorService 接口继承了 Executor 接口并进行了扩展,提供了更多的方法我 们能获得任务执行的状态并且可以获取任务的返回值。 使用 Th 阅读全文
posted @ 2020-06-21 14:22 咔啡 阅读(369) 评论(0) 推荐(0)
摘要: 进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元。一个程序至少有一个进程,一个进程至少有一个线程。 阅读全文
posted @ 2020-06-21 14:20 咔啡 阅读(125) 评论(0) 推荐(0)
摘要: Check 限制,它在数据库表格里被定义,用来限制输入该列的值。 触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。 阅读全文
posted @ 2020-06-21 14:19 咔啡 阅读(182) 评论(0) 推荐(0)
摘要: 每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗时、耗资源的。 调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线程之间的频繁交替也会消耗很多系统资源。 接使用 new 阅读全文
posted @ 2020-06-21 14:18 咔啡 阅读(195) 评论(0) 推荐(0)
摘要: ThreadGroup 类,可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线程,这样的组织结构有点类似于树的形式。 为什么不推荐使用?因为使用有很多的安全隐患吧,没有具体追究,如果需要使用,推荐使用线程池。 阅读全文
posted @ 2020-06-21 14:16 咔啡 阅读(269) 评论(0) 推荐(0)
摘要: 在 Java 并发程序中 FutureTask 表示一个可以取消的异步运算。它有启动和取消 运算、查询运算是否完成和取回运算结果等方法。只有当运算完成的时候结果才 能取回,如果运算尚未完成 get 方法将会阻塞。一个 FutureTask 对象可以对调用 了 Callable 和 Runnable 阅读全文
posted @ 2020-06-21 14:14 咔啡 阅读(235) 评论(0) 推荐(0)
摘要: 采用时间片轮转的方式。可以设置线程的优先级,会映射到下层的系统上面的优先级上,如非特别需要,尽量不要用,防止线程饥饿。 阅读全文
posted @ 2020-06-21 14:13 咔啡 阅读(163) 评论(0) 推荐(0)
摘要: 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。 这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当 队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消 费者是从队列里拿元素的线程。阻塞队列就是生产 阅读全文
posted @ 2020-06-21 14:12 咔啡 阅读(174) 评论(0) 推荐(0)
摘要: 1、Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可 以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。 2、用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。 3、 避免在索引列上使用计算 4、避免在索引 阅读全文
posted @ 2020-06-21 14:11 咔啡 阅读(153) 评论(0) 推荐(0)
摘要: Executor 框架是一个根据一组执行策略调用,调度,执行和控制的异步任务的框 架。 无限制的创建线程会引起应用程序内存溢出。所以创建一个线程池是个更好的的 解决方案,因为可以限制线程的数量并且可以回收再利用这些线程。利用 Executors 框架可以非常方便的创建一个线程池。 阅读全文
posted @ 2020-06-21 14:00 咔啡 阅读(176) 评论(0) 推荐(0)
摘要: Lock 接口比同步方法和同步块提供了更具扩展性的锁操作。 他们允许更灵活的结构,可以具有完全不同的性质,并且可以支持多个相关类的 条件对象。 它的优势有: 可以使锁更公平 可以使线程在等待锁的时候响应中断 可以让线程尝试获取锁,并在无法获取锁的时候立即返回或者等待一段时间 可以在不同的范围,以不同 阅读全文
posted @ 2020-06-21 13:57 咔啡 阅读(197) 评论(0) 推荐(0)
摘要: 原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。 处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。 在 Java 中可以通过锁和循环 CAS 的方式来实现原子操作。 CAS 操作—— Compare & Set,或是 Compare & Sw 阅读全文
posted @ 2020-06-21 13:50 咔啡 阅读(285) 评论(0) 推荐(0)
摘要: 在 Java 发展史上曾经使用 suspend()、resume()方法对于线程进行阻塞唤醒,但 随之出现很多问题,比较典型的还是死锁问题。 解决方案可以使用以对象为目标的阻塞,即利用 Object 类的 wait()和 notify()方 法实现线程阻塞。 首先,wait、notify 方法是针对 阅读全文
posted @ 2020-06-21 13:48 咔啡 阅读(795) 评论(0) 推荐(0)
摘要: 新建状态(New) 用 new 语句创建的线程处于新建状态,此时它和其他 Java 对象一样,仅仅在堆区 中被分配了内存。 就绪状态(Runnable) 当一个线程对象创建后,其他线程调用它的 start()方法,该线程就进入就绪状态, Java 虚拟机会为它创建方法调用栈和程序计数器。处于这个状态 阅读全文
posted @ 2020-06-21 13:43 咔啡 阅读(490) 评论(0) 推荐(0)
摘要: 当多个进程都企图对共享数据进行某种处理,而最后的结果又取决于进程运行的 顺序时,则我们认为这发生了竞争条件(race condition)。 阅读全文
posted @ 2020-06-21 13:41 咔啡 阅读(1437) 评论(0) 推荐(0)
摘要: 使用 jstack 找出消耗 CPU 最多的线程代码 阅读全文
posted @ 2020-06-21 13:40 咔啡 阅读(1070) 评论(0) 推荐(0)
摘要: 为什么要使用 Executor 线程池框架 1、每次执行任务创建线程 new Thread()比较消耗性能,创建一个线程是比较耗 时、耗资源的。 2、调用 new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制的 创建,线程之间的相互竞争会导致过多占用系统资源而导致系统瘫痪,还有线 阅读全文
posted @ 2020-06-21 13:38 咔啡 阅读(165) 评论(0) 推荐(0)
摘要: 线程组和线程池是两个不同的概念,他们的作用完全不同,前者是为了方便线程的管理,后者是为了管理线程的生命周期,复用线程,减少创建销毁线程的开销。 阅读全文
posted @ 2020-06-21 13:37 咔啡 阅读(165) 评论(0) 推荐(0)
摘要: 计算机通常只有一个 CPU,在任意时刻只能执行一条机器指令,每个线程只有获得 CPU 的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线 程轮流获得 CPU 的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状 态的线程在等待 CPU,JAVA 虚拟机的一项任务就是负责线 阅读全文
posted @ 2020-06-21 13:33 咔啡 阅读(368) 评论(0) 推荐(0)
摘要: CyclicBarrier 可以重复使用,而 CountdownLatch 不能重复使用。 Java 的 concurrent 包里面的 CountDownLatch 其实可以把它看作一个计数器, 只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器, 也就是同时只能有一个线程去减这 阅读全文
posted @ 2020-06-21 13:32 咔啡 阅读(126) 评论(0) 推荐(0)
摘要: 在上下文切换过程中,CPU 会停止处理当前运行的程序,并保存当前程序运行的 具体位置以便之后继续运行。从这个角度来看,上下文切换有点像我们同时阅读 几本书,在来回切换书本的同时我们需要记住每本书当前读到的页码。在程序中, 上下文切换过程中的“页码”信息是保存在进程控制块(PCB)中的。PCB 还经 阅读全文
posted @ 2020-06-21 13:28 咔啡 阅读(500) 评论(0) 推荐(0)
摘要: 不可变对象(Immutable Objects)即对象一旦被创建它的状态(对象的数据,也即 对象属性值)就不能改变,反之即为可变对象(Mutable Objects)。 不可变对象的类即为不可变类(Immutable Class)。Java 平台类库中包含许多不可 变类,如 String、基本类型的 阅读全文
posted @ 2020-06-21 13:27 咔啡 阅读(185) 评论(0) 推荐(0)
摘要: 举例来说明锁的可重入性 public class UnReentrant{ Lock lock = new Lock(); public void outer(){ lock.lock(); inner(); lock.unlock(); } public void inner(){ lock.lo 阅读全文
posted @ 2020-06-21 13:25 咔啡 阅读(2948) 评论(0) 推荐(0)
摘要: 中断和共享变量 阅读全文
posted @ 2020-06-21 13:23 咔啡 阅读(161) 评论(0) 推荐(0)
摘要: 所谓后台(daemon)线程,是指在程序运行的时候在后台提供一种通用服务的线 程,并且这个线程并不属于程序中不可或缺的部分。因此,当所有的非后台线程 结束时,程序也就终止了,同时会杀死进程中的所有后台线程。反过来说, 只要有任何非后台线程还在运行,程序就不会终止。必须在线程启动之前调用 setDae 阅读全文
posted @ 2020-06-21 13:22 咔啡 阅读(787) 评论(0) 推荐(0)
摘要: 当一个线程进入 wait 之后,就必须等其他线程 notify/notifyall,使用 notifyall,可 以唤醒所有处于 wait 状态的线程,使其重新进入锁的争夺队列中,而 notify 只能 唤醒一个。 如果没把握,建议 notifyAll,防止 notigy 因为信号丢失而造成程序异常 阅读全文
posted @ 2020-06-21 12:58 咔啡 阅读(212) 评论(0) 推荐(0)
摘要: 使用共享变量的方式 在这种方式中,之所以引入共享变量,是因为该变量可以被多个执行相同任务的 线程用来作为是否中断的信号,通知中断线程的执行。 使用 interrupt 方法终止线程 如果一个线程由于等待某些事件的发生而被阻塞,又该怎样停止该线程呢?这种 情况经常会发生,比如当一个线程由于需要等候键盘 阅读全文
posted @ 2020-06-21 12:56 咔啡 阅读(451) 评论(0) 推荐(0)
摘要: 继承 Thread 类 实现 Runnable 接口 实现 Callable 接口,需要实现的是 call() 方法 阅读全文
posted @ 2020-06-21 12:53 咔啡 阅读(445) 评论(0) 推荐(0)
摘要: 线程安全是编程中的术语,指某个函数、函数库在多线程环境中被调用时,能够 正确地处理多个线程之间的共享变量,使程序功能正确完成。 Servlet 不是线程安全的,servlet 是单实例多线程的,当多个线程同时访问同一个 方法,是不能保证共享变量的线程安全性的。 Struts2 的 action 是多 阅读全文
posted @ 2020-06-21 12:52 咔啡 阅读(598) 评论(0) 推荐(0)
摘要: SynchronizedMap 一次锁住整张表来保证线程安全,所以每次只能有一个线程来 访为 map。 ConcurrentHashMap 使用分段锁来保证在多线程下的性能。 ConcurrentHashMap 中则是一次锁住一个桶。ConcurrentHashMap 默认将 hash 表分为 16 阅读全文
posted @ 2020-06-21 12:50 咔啡 阅读(220) 评论(0) 推荐(0)
摘要: CopyOnWriteArrayList(免锁容器)的好处之一是当多个迭代器同时遍历和修改这 个列表时,不会抛出 ConcurrentModificationException。在 CopyOnWriteArrayList 中,写入将导致创建整个底层数组的副本,而源数组将保 留在原地,使得复制的数组 阅读全文
posted @ 2020-06-21 12:49 咔啡 阅读(689) 评论(0) 推荐(0)
摘要: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每 次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传 统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写 锁等,都是在做操作之前先上锁。再比如 Java 里面的同步原语 synchroniz 阅读全文
posted @ 2020-06-21 12:47 咔啡 阅读(237) 评论(0) 推荐(0)
摘要: 如果其他方法没有 synchronized 的话,其他线程是可以进入的。 所以要开放一个线程安全的对象时,得保证每个方法都是线程安全的。 阅读全文
posted @ 2020-06-21 12:41 咔啡 阅读(200) 评论(0) 推荐(0)
摘要: 如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler 是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异 常将造成线程中断的时候 JVM 会使用 Thread.getUncaughtExceptionHandler() 来查询线程的 阅读全文
posted @ 2020-06-21 12:40 咔啡 阅读(248) 评论(0) 推荐(0)
摘要: 参考 java 中的阻塞队列的内容吧,直接实现有点烦 阅读全文
posted @ 2020-06-21 12:35 咔啡 阅读(509) 评论(0) 推荐(0)
摘要: 最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线 程间交互,sleep 通常被用于暂停执行。 直接了解的深入一点吧: 在 Java 中线程的状态一共被分成 6 种: 初始态:NEW 创建一个 Thread 对象,但还未调用 start()启动线程时,线程处 阅读全文
posted @ 2020-06-21 12:32 咔啡 阅读(146) 评论(0) 推荐(0)
摘要: 在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重排序,但是不能随意重排序,不是你想怎么排序就怎么排序,它需要满足以下两个条件: 在单线程环境下不能改变程序运行的结果;存在数据依赖关系的不允许重排序 需要注意的是:重排序不会影响单线程环境的执行结果,但是会破坏多线程的执行语义。 阅读全文
posted @ 2020-06-21 12:18 咔啡 阅读(204) 评论(0) 推荐(0)
摘要: volatile 保证内存可见性和禁止指令重排。 volatile 用于多线程环境下的单次操作(单次读或者单次写)。 阅读全文
posted @ 2020-06-21 12:17 咔啡 阅读(221) 评论(0) 推荐(0)
摘要: ThreadLocal 是 Java 里一种特殊的变量。每个线程都有一个 ThreadLocal 就是每 个线程都拥有了自己独立的一个变量,竞争条件被彻底消除了。它是为创建代价 高昂的对象获取线程安全的好方法,比如你可以用 ThreadLocal 让 SimpleDateFormat 变成线程安全的 阅读全文
posted @ 2020-06-21 12:15 咔啡 阅读(177) 评论(0) 推荐(0)
摘要: Java API 强制要求这样做,如果你不这么做,你的代码会抛出 IllegalMonitorStateException 异常。还有一个原因是为了避免 wait 和 notify 之间产生竞态条件。 阅读全文
posted @ 2020-06-21 12:05 咔啡 阅读(427) 评论(0) 推荐(0)
摘要: 一个很明显的原因是 JAVA 提供的锁是对象级的而不是线程级的,每个对象都有 锁,通过线程获得。由于 wait,notify 和 notifyAll 都是锁级别的操作,所以把他 们定义在 Object 类中因为锁属于对象。 阅读全文
posted @ 2020-06-21 12:00 咔啡 阅读(281) 评论(0) 推荐(0)
摘要: notify() 方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有 用武之地。而 notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程 能继续运行。 阅读全文
posted @ 2020-06-21 11:57 咔啡 阅读(187) 评论(0) 推荐(0)
摘要: 在两个线程间共享变量即可实现共享。 一般来说,共享变量要求变量本身是线程安全的,然后在线程内使用的时候,如果有对共享变量的复合操作,那么也得保证复合操作的线程安全性。 阅读全文
posted @ 2020-06-21 11:55 咔啡 阅读(584) 评论(0) 推荐(0)
摘要: ConcurrentHashMap 把实际 map 划分成若干部分来实现它的可扩展性和线程安 全。这种划分是使用并发度获得的,它是 ConcurrentHashMap 类构造函数的一 个可选参数,默认值为 16,这样在多线程情况下就能避免争用。 在 JDK8 后,它摒弃了 Segment(锁段)的概 阅读全文
posted @ 2020-06-21 11:52 咔啡 阅读(248) 评论(0) 推荐(0)
摘要: 在 java.lang.Thread 中有一个方法叫 holdsLock(),它返回 true 如果当且仅当当前线程拥有某个具体对象的锁。 阅读全文
posted @ 2020-06-21 11:47 咔啡 阅读(524) 评论(0) 推荐(0)
摘要: 使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。 当前线程到了就绪状态,那么接下来哪个线程会从就绪状态变成执行状态呢?可 能是当前线程,也可能是其他线程,看系统的分配了。 阅读全文
posted @ 2020-06-21 11:44 咔啡 阅读(310) 评论(0) 推荐(0)
摘要: 创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变 长,而且一个进程能创建的线程数有限。为了避免这些问题,在程序启动的时候 就创建若干线程来响应处理,它们被称为线程池,里面的线程叫工作线程。从 JDK1.5 开始,Java API 提供了 Executor 框架让你可以创建不同的 阅读全文
posted @ 2020-06-21 11:34 咔啡 阅读(751) 评论(0) 推荐(0)
摘要: 同步集合与并发集合都为多线程和并发提供了合适的线程安全的集合,不过并发 集合的可扩展性更高。在 Java1.5 之前程序员们只有同步集合来用且在多线程并发 的时候会导致争用,阻碍了系统的扩展性。Java5 介绍了并发集合像 ConcurrentHashMap,不仅提供线程安全还用锁分离和内部分区等现 阅读全文
posted @ 2020-06-21 11:32 咔啡 阅读(264) 评论(0) 推荐(0)
摘要: 处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条 件,程序就会在没有满足结束条件的情况下退出。 阅读全文
posted @ 2020-06-21 11:20 咔啡 阅读(305) 评论(0) 推荐(0)
摘要: 读写锁是用来提升并发程序性能的锁分离技术的成果。 阅读全文
posted @ 2020-06-21 11:01 咔啡 阅读(215) 评论(0) 推荐(0)
摘要: 阻塞式方法是指程序会一直等待该方法完成期间不做其他事情,ServerSocket 的 accept()方法就是一直等待客户端连接。这里的阻塞是指调用结果返回之前,当前 线程会被挂起,直到得到结果之后才会返回。此外,还有异步和非阻塞式方法在 任务完成前就返回。 阅读全文
posted @ 2020-06-21 10:35 咔啡 阅读(504) 评论(0) 推荐(0)
摘要: 一个数字字符串,只能包含数字,如 0 到 9 以及 +、- 开头,通过这个信息, 你可以下一个如下的正则表达式来判断给定的字符串是不是数字。 首先要 import java.util.regex.Pattern 和 java.util.regex.Matcher public boolean isN 阅读全文
posted @ 2020-06-21 10:34 咔啡 阅读(545) 评论(0) 推荐(0)
摘要: Spring 核心容器 – 该层基本上是 Spring Framework 的核心。它包含以下模块: Spring Core Spring Bean SpEL (Spring Expression Language) Spring Context 数据访问/集成 – 该层提供与数据库交互的支持。它包 阅读全文
posted @ 2020-06-21 10:32 咔啡 阅读(1158) 评论(0) 推荐(0)
摘要: 控制反转(IOC)是 Spring 框架的核心思想,用我自己的话说,就是你要做一件 事,别自己可劲 new 了,你就说你要干啥,然后外包出去就好 依赖注入(DI) 在我浅薄的想法中,就是通过接口的引用和构造方法的表达,将 一些事情整好了反过来传给需要用到的地方 阅读全文
posted @ 2020-06-21 10:30 咔啡 阅读(589) 评论(0) 推荐(0)
摘要: 虽然两者都是构建工具,都用于创建 Java 应用,但是 Maven 做的事情更多, 在基于“约定优于配置”的概念下,提供标准的 Java 项目结构,同时能为应用自 动管理依赖(应用中所依赖的 JAR 文件),Maven 与 ANT 工具更多的不同之 处请参见答案。 这就是所有的面试题,如此之多,是不 阅读全文
posted @ 2020-06-21 10:13 咔啡 阅读(436) 评论(0) 推荐(0)
摘要: 如果两个对象彼此有关系,就说他们是彼此相关联的。组合和聚合是面向对象中 的两种形式的关联。组合是一种比聚合更强力的关联。组合中,一个对象是另一 个的拥有者,而聚合则是指一个对象使用另一个对象。如果对象 A 是由对象 B 组合的,则 A 不存在的话,B 一定不存在,但是如果 A 对象聚合了一个对象 B 阅读全文
posted @ 2020-06-21 10:09 咔啡 阅读(586) 评论(0) 推荐(0)
摘要: rm rm -r rmdir 阅读全文
posted @ 2020-06-21 10:08 咔啡 阅读(254) 评论(0) 推荐(0)
摘要: cp cp -r 阅读全文
posted @ 2020-06-21 10:05 咔啡 阅读(281) 评论(0) 推荐(0)
摘要: Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加 载,association 指的就是一对一,collection 指的就是一对多查询。在 Mybatis 配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|fa 阅读全文
posted @ 2020-06-21 10:02 咔啡 阅读(344) 评论(0) 推荐(0)
摘要: 有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面的 collection 节点配置一对多的类就可以完成;嵌套查询是先查 一个表,根据这个表里面的 结果的外键 id,去再另外一个表里面查询数据,也是通过 配置 collection,但另外一个表的查询通过 s 阅读全文
posted @ 2020-06-21 09:59 咔啡 阅读(151) 评论(0) 推荐(0)
摘要: ps -ef (system v 输出) ps -aux bsd 格式输出 ps -ef | grep pid 阅读全文
posted @ 2020-06-21 09:52 咔啡 阅读(338) 评论(0) 推荐(0)
摘要: job -l 阅读全文
posted @ 2020-06-21 09:50 咔啡 阅读(320) 评论(0) 推荐(0)
摘要: 接口绑定,就是在 MyBatis 中任意定义接口,然后把接口里面的方法和 SQL 语句绑 定, 我们直接调用接口方法就可以,这样比起原来了 SqlSession 提供的方法我们可 以有更加灵活的选择和设置。 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上 @Select、@Up 阅读全文
posted @ 2020-06-21 09:44 咔啡 阅读(1544) 评论(0) 推荐(0)
摘要: 端到端测试验证了工作流中的每个流程都正常运行。这可确保系统作为一个整体 协同工作并满足所有要求。 通俗地说,你可以说端到端测试是一种测试,在特定时期后测试所有东西。 阅读全文
posted @ 2020-06-21 09:42 咔啡 阅读(391) 评论(0) 推荐(0)
摘要: 非确定性测试(NDT)基本上是不可靠的测试。所以,有时可能会发生它们通过, 显然有时它们也可能会失败。当它们失败时,它们会重新运行通过。 从测试中删除非确定性的一些方法如下: 1、 隔离 2、 异步 3、 远程服务 4、 隔离 5、 时间 6、 资源泄漏 阅读全文
posted @ 2020-06-21 09:40 咔啡 阅读(180) 评论(0) 推荐(0)
摘要: 持续监控深入监控覆盖范围,从浏览器内前端性能指标,到应用程序性能,再到主机虚拟化基础架构指标。 阅读全文
posted @ 2020-06-21 09:37 咔啡 阅读(237) 评论(0) 推荐(0)
摘要: 一般都是使用 & 在命令结尾来让程序自动运行。(命令后可以不追加空格) 阅读全文
posted @ 2020-06-21 09:35 咔啡 阅读(580) 评论(0) 推荐(0)
摘要: ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持崩溃恢复的原子广 播协议。 ZAB 协议包括两种基本的模式:崩溃恢复和消息广播。 当整个 zookeeper 集群刚刚启动或者 Leader 服务器宕机、重启或者网络故障导 致不存在过半的服务器与 Leader 服务器保持正常通信 阅读全文
posted @ 2020-06-21 09:33 咔啡 阅读(115) 评论(0) 推荐(0)
摘要: Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。Zookeeper 自身也要保 证当一个节点宕机时,其他节点会继续提供服务。 如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上的数 据是有多个副本的,数据并不会丢失; 如果是一个 Leader 阅读全文
posted @ 2020-06-21 09:31 咔啡 阅读(696) 评论(0) 推荐(0)
摘要: dubbo://(推荐) rmi:// hessian:// http:// webservice:// thrift:// memcached:// redis:// rest:// 阅读全文
posted @ 2020-06-21 09:24 咔啡 阅读(419) 评论(0) 推荐(0)
摘要: 两个方法都可以向线程池提交任务,execute()方法的返回类型是 void,它定义在Executor 接口中。 而 submit()方法可以返回持有计算结果的 Future 对象,它定义在ExecutorService 接口中,它扩展了 Executor 接口,其它线程池类像ThreadPoolE 阅读全文
posted @ 2020-06-21 09:21 咔啡 阅读(2558) 评论(0) 推荐(0)
摘要: Dubbo 是通过 JDK 的 ShutdownHook 来完成优雅停机的,所以如果使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。 阅读全文
posted @ 2020-06-21 09:17 咔啡 阅读(1008) 评论(0) 推荐(0)
摘要: -Xss 每个线程的栈大小 阅读全文
posted @ 2020-06-21 09:06 咔啡 阅读(366) 评论(0) 推荐(0)
摘要: 迪米特法则建议“只和朋友说话,不要陌生人说话”,以此来减少类之间的耦合。 阅读全文
posted @ 2020-06-21 09:02 咔啡 阅读(377) 评论(0) 推荐(0)
摘要: OAuth 代表开放授权协议。这允许通过在 HTTP 服务上启用客户端应用程序(例 如第三方提供商 Facebook,GitHub 等)来访问资源所有者的资源。因此,您可 以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。32、康威定律是什么? “任何 设计 系统 的组 织( 广泛 定 阅读全文
posted @ 2020-06-21 08:56 咔啡 阅读(560) 评论(0) 推荐(0)
摘要: 想了解 ES 集群的底层原理,不再只关注业务层面了。 前置前提: 1、只有候选主节点(master:true)的节点才能成为主节点。 2、最小主节点数(min_master_nodes)的目的是防止脑裂。 这个我看了各种网上分析的版本和源码分析的书籍,云里雾里。 核对了一下代码,核心入口为 find 阅读全文
posted @ 2020-06-21 08:51 咔啡 阅读(738) 评论(0) 推荐(0)
摘要: kill -3 [java pid] 不会在当前终端输出,它会输出到代码执行的或指定的地方去。比如,kill -3 tomcat pid, 输出堆栈到 log 目录下。 Jstack [java pid] 这个比较简单,在当前终端显示,也可以重定向到指定文件中。 -JvisualVM:Thread 阅读全文
posted @ 2020-06-21 08:42 咔啡 阅读(631) 评论(0) 推荐(0)
摘要: 享元模式通过共享对象来避免创建太多的对象。为了使用享元模式,你需要确保 你的对象是不可变的,这样你才能安全的共享。JDK 中 String 池、Integer 池 以及 Long 池都是很好的使用了享元模式的例子。 阅读全文
posted @ 2020-06-21 08:41 咔啡 阅读(294) 评论(0) 推荐(0)
摘要: 有联合查询和嵌套查询。联合查询是几个表联合查询,只查询一次,通过在 resultMap 里面的 collection 节点配置一对多的类就可以完成;嵌套查询是先查 一个表,根据这个表里面的 结果的外键 id,去再另外一个表里面查询数据,也是通过 配置 collection,但另外一个表的查询通过 s 阅读全文
posted @ 2020-06-21 08:00 咔啡 阅读(3416) 评论(0) 推荐(0)
摘要: java 客户端:zk 自带的 zkclient 及 Apache 开源的 Curator。 阅读全文
posted @ 2020-06-21 07:50 咔啡 阅读(141) 评论(0) 推荐(0)
摘要: 存根 一个有助于运行测试的虚拟对象。 在某些可以硬编码的条件下提供固定行为。 永远不会测试存根的任何其他行为。 例如,对于空堆栈,您可以创建一个只为 empty()方法返回 true 的存根。因此, 这并不关心堆栈中是否存在元素。 一个虚拟对象,其中最初设置了某些属性。 此对象的行为取决于 set 阅读全文
posted @ 2020-06-21 07:49 咔啡 阅读(107) 评论(0) 推荐(0)
摘要: Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加 载,association 指的就是一对一,collection 指的就是一对多查询。在 Mybatis 配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|fa 阅读全文
posted @ 2020-06-21 07:38 咔啡 阅读(772) 评论(0) 推荐(0)