摘要:
orm dao关心sql生成、参数绑定、结果映射 service层使用事务 事务管理的基础是基于同一个数据库链接;多线程公用一个数据库连接会发生回滚;不同线程使用不同的连接的办法是使用threadlocal; spring是胶水层、提供的功能都是集成过来的; 理论是实践之后的产物 注解的核心是aop 阅读全文
摘要:
sleep和yield都不会释放锁 sleep不出让cpu使用权,仅暂停执行 yield出让cpu使用权,但处于可运行状态 wait、notify、notifyall被调用之前需要持有锁,调用之后释放锁,是一个“等待通知机制” notify是cpu唤醒被锁的对象上随意一个线程,所以最好使用notif 阅读全文
摘要:
一、checked异常和unchecked异常区别? checked异常是编译时可以推断出来可能发生异常,ide会提示,比如ioexception、interruptExcetion; unchecked异常是运行时异常,比如OutOfBounceExcetion 二、线程异常 因为run方法没有c 阅读全文
摘要:
支持高并发是目的,多线程是手段,进一步的手段是分布式 一、线程的状态 1.新创建 2.可运行:运行状态,由cpu决定在不在执行 3.阻塞:没抢到锁 4.等待/计时等待,等待某些条件(sleep wait) 5.被终止 二、特别点 1.守护线程的try{}finaly块中,finnaly不一定执行 2 阅读全文
摘要:
建议自定义标志位和IsInterrupted标志位结合使用 使用自定义标志位的方法如果是阻塞方法(sleep),则自定义标志位无效; 如果单单使用IsInterrupted标志位,又因为java的多线程是协作方式而不是强制方式,所以可能不理会“打招呼”式的中断请求(特别是IO通信方法); 只有两个标 阅读全文
摘要:
一、JAVA内存模型中,线程的工作内存和共享内存的交互协议规定了8种操作, 1.其中的读取和载入这一对、赋值和存储这一对不是原子操作; 2.每一对中只要求顺序执行 不一定连续执行 二、synchronized语义规范在多写多读场景下保证了原子性,因为有锁;语义如下: 1.进入同步块钱,先清空工作内存 阅读全文
摘要:
jms和amqp是消息代理的规范 activemq、rabbitmq是规范的实现:activemq是jms规范的实现,rabbitmq是amqp规范的实现 同理 jpa是orm规范,而hibernate、mybatis 阅读全文
摘要:
在tomcat容器中,servlet默认是单例模式;如果实现ISingleThreadModule标记接口 则针对多个请求创建多个实例(最多20个),为了实现线程安全,可以: 1.使用局部变量 而不是实例变量 2.使用synchronized关键字 综上说明静态变量、实例变量、局部变量,三者使用范围 阅读全文
摘要:
框架都是应用或者组合了设计模式,而设计模式都是基于oo设计原则,有哪些设计原则呢? 一、设计原则 装饰者模式(类容器扩展) 1.开放封闭原则 2.里氏替换原则 策略模式 3.封装变化原则 4.针对接口编程 5.多用组合少用集成 工厂模式(高层和底层组件都应该依赖于抽象) 6.依赖倒置原则 外观模式( 阅读全文
摘要:
场景:分布式ID生成器 组成结构:首位无效符+时间戳差值、机器(进程)编码、序列号 特点:自增、有序;可按时间进行排序,标识机器节点,序列号是同一毫秒生成的id数量 修正:可以根据自身项目修改,比如机器编码改成自定义业务属性、 缺点:机器节点的时钟不同 则全局来说不是递增的 阅读全文