总结
Java位运算在 Java 中,整数通常使用补码表示。正数的补码表示和其原码相同,而负数的补码是其原码的反码加1。
推荐文章:Java 位运算(移位、位与、或、异或、非)
左移( << ):无论正数还是负数,都是在低位补0
右移( >> ):正数在高位补0,对于负数在高位补1
无符号右移( >>> ):无论正数还是负数,都在高位插入0
位与( & ) :第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0
位或( | ):第一个操作数的的第n位于第二个操作数的第n位只要有一个是1,那么结果的第n为也为1,否则为0
位异或( ^ ):第一个操作数的的第n位于第二个操作数的第n位相反,那么结果的第n为也为1,否则为0
位非( ~ ):操作数的第n位为1,那么结果的第n位为0,反之。
注意:位非是一元操作符,其他是二元操作符
抽象类和接口的区别
抽象类和接口都不能直接实例化。
抽象类可以有main方法,接口则不可以有。
抽象类可以有构造方法,接口则不可以有。
一个类可以通过implement ...
Daily Support
Notepad++行前行尾添加字符:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
输入 ^ 行前添加字符串
输入 $ 行尾添加字符串
删除包含某字符串的行:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
查找目标输入.*DROP.*,DROP是想替换的关键词
全部替换
删除空白行:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
查找目标输入^\s
全部替换
下划线转驼峰:
按Ctrl + H 打开替换窗口
查找模式选择正则表达式
查找目标输入_([a-z])
替换为\U\1\E
全部替换
SQL操作前的判断123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#创建表前的判断USE [db_test]GOIF EXISTS (SELECT 1 FROM dbo.sysobjects WHERE type = 'U' AND name = 'table_name') ...
Loma 281 Module4
Lesson 1The Group Insurance Contract【团体保险合同】一些术语:
group insurance: A method of providing life or health insurance coverage for a group of people under one insurance contract.
团体保险:根据一份保险合同为一群人提供人寿或健康保险的一种方法。
master group insurance contract: An insurance contract that insures a number of people.
主团体保险合同:为多人投保的保险合同。
group insured: An individual covered by a group insurance policy. He isn’t a party to the group insurance contract.
团体被保险人:由团体保险单承保的个人。他不是团体保险合同的一方。
group policyholder: The pers ...
Loma 281 Module3
Lesson 1Supplemental Benefits【补充福利】Supplemental disability benefits include:
waiver of premium for disability (WP) benefit 豁免残疾保险金
the insured must be totally disabled for three to six months and continue to make the premium payments that come due before the insurer will begin waiving premium payments.
被保险人必须完全残疾三到六个月,并在保险公司开始豁免保费之前继续支付到期的保费
the insurer promises to give up—to waive—its right to collect premiums that become due while the insured is totally disabled.
保险公司承诺在被保险人完全残疾期间放弃(豁免)收取到期保费 ...
Loma 281 Module2
Lesson 1Term Life Insurance【定期人寿保险】Term Life Insurance: Life insurance that provides a death benefit only if the insured dies during the period specified in the policy.
Four types of term life insurance:
Level term life insurance ─ The policy benefit—and usually the premium—remains the same over the term.
固定期限寿险:保单保险金(通常也是保费)在整个期限内保持不变。
Decreasing term life insurance ─ The policy benefit decreases over the policy term, but the premium amount usually remains the same.Examples are mortgage insu ...
Loma 281 Module1
Lesson 1Types of Risk【风险种类】Risk is the possibility of an unexpected result.
Speculative risk can result in a gain, a loss, or no change;
pure risk involves either a loss or no loss.
投机风险可能获利。纯风险没有获利,只有纯风险才能投保。
Risk Management【风险管理】Four risk management techniques:
Avoid the risk:避免风险(比如当心亏钱而不投资股票)
Control the risk :控制风险(比如安装烟雾探测器来防止或减少火灾的损失)
Accept the risk:接受风险(不通过其他方式管理风险:避免,控制或转移风险)
Transfer the risk:转移风险(比如通过购买保险将风险的经济责任转移给保险公司)
Life Insurance Terminology【人寿保险术语】Two basic types o ...
Java内存模型之JMM
计算机硬件存储体系 计算机存储结构,从本地磁盘到主存再到CPU缓存,也就是从硬盘到内存再到CPU。一般对应的程序的操作就是从数据库查数据到内存然后到CPU进行计算。
因为有这么多级的缓存(cpu和物理主内存的速度不一致的),CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存,而内存的读和写操作的时候就会造成不一致的问题。
Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,简称JMM) 来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。
Java内存模型Java Memory ModelJMM(Java内存模型Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它仅仅描述的是一组约定或规范,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式,并决定一个线程对共享变量的写入何时以及如何变成对另一个线程可见,关键技术点都是围绕多线程的原子性、可见性和有序性展开的。
原则:
JMM的关键技术点都是围绕多线程的原子性、可见性和有序性展开的
能干嘛? ...
LockSupport与线程中断
中断机制首先一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以Thread.stop,Thread.suspend, Thread.resume 都已经被废弃了。
其次在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的机制——中断。中断只是一种协作机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。
若要中断一个线程,你需要手动调用该线程的interrupt方法,该方法也仅仅是将线程对象的中断标识设成true;接着你需要自己写代码不断地检测当前线程的标识位,如果为true,表示别的线程要求这条线程中断,此时究竟该做什么需要你自己写代码实现。
每个线程对象中都有一个标识,用于表示线程是否被中断:该标识位为true表示中断,为false表示未中断;
通过调用线程对象的interrupt方法将该线程的标识位设为true;可以在别的线程中调用,也可以在自己的线程中调用。
中断相关的API方法
方法
描述
public void interrupt()
实例方法,实 ...
多线程锁
悲观锁定义:悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。
实现方式:synchronized关键字和Lock的实现类都是悲观锁
适用场景:写操作多的场景,先加锁可以保证写操作时数据正确,显示的锁定之后再操作同步资源。
伪代码说明:
12345678910111213141516 //=============悲观锁的调用方式public synchronized void m1(){ //加锁后的业务逻辑......}// 保证多个线程使用的是同一个lock对象的前提下ReentrantLock lock = new ReentrantLock();public void m2() { lock.lock(); try { // 操作同步资源 }finally { lock.unlock(); }}
乐观锁定义:乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁 ...