当前位置: 首页 > news >正文

大学生做兼职的网站有哪些免费行情软件网站有哪些

大学生做兼职的网站有哪些,免费行情软件网站有哪些,建设银行报考网站,做模型网站赚钱么文章目录 java 基础1、JDK 和 JRE的区别2、 和equals的区别3、String、StringBuffer、StringBuilder4、String str “a”、 new String(“a”)一样吗#xff1f;5、ArrayList 和 LinkedList的区别#xff1f;6、HashMap的原理与实现6.1、容量与扩容6.2、扩容机制 7、HashMa… 文章目录 java 基础1、JDK 和 JRE的区别2、 和equals的区别3、String、StringBuffer、StringBuilder4、String str “a”、 new String(“a”)一样吗5、ArrayList 和 LinkedList的区别6、HashMap的原理与实现6.1、容量与扩容6.2、扩容机制 7、HashMap中的put方法执行过程8、ConcurrentHashMap工作原理9、SimpleDateFormat是线程安全的吗10、java.util.Date 与 java.sql.Date 有什么区别11、对象被置为null垃圾回收器会立即释放占用的内存吗12、java的数据结构有哪些13、java中异常分为几种14、Error与Exception的区别15、java的单模式16、哪些集合是线程安全的17、synchronized原理18、volatile有什么用19、synchronized关键字可以实现什么类型的锁20、怎么创建不可修改的集合21、sleep和wait的区别22、jvm内存结构23、运行时数据区24、堆结构jdk1.825、java垃圾回收算法26、垃圾回收器27、GC Roots 可以是哪些28、引用类型有哪些29、java的IO流分为几种30、BIO、NIO、AIO31、NIO直接缓冲区与非直接缓冲区32、NIO内存映射到缓存33、序列化和反序列化 网络基础1、TCP 三次握手2、TCP 四次挥手关闭连接3、TCP与UDP的区别4、请求出现503是什么问题 spring1、spring boot启动流程2、spring bean的实例化3、Spring的ioc4、Spring的aop5、Spring的类加载机制6、Java类加载机制7、双亲委派模型8、Spring怎么解决循环依赖9、Spring 用到了哪些设计模式10、设计模式的六大原则11、spring的事务和分布式事务12、分布式事务的实现方式13、分布式锁 mysql1、事务四大特性2、事务的隔离级别3、脏读、重复读、幻读4、B树和B树的区别5、mysql为什么用B树6、mysql锁有哪些7、mysql的redolog、binlog、undolog8、mysql二阶段提交9、mysql什么时候会索引失效 redis1、缓存雪崩、缓存击穿、缓存穿透2、会员中有大量要过期怎么处理 多线程1、线程同步的方法2、什么是ThreadLocal以及其实现原理3、为什么要使用线程池4、线程池执行过程5、线程池的创建方式6、线程池的7个参数7、线程池队列有哪些8、线程池拒绝策略有哪些9、线程池的关闭10、使用无界队列的线程池会导致内存飙升吗11、线程创建的几种方式12、Future有什么用13、FutureTask有什么用14、线程的生命周期状态15、 i是线程安全的吗16、可重入锁ReentrantLock16.1、Synchronized和ReentrantLock的相同16.2、Synchronized和ReentrantLock的不同 17、synchronized可重入锁的实现原理 Activiti流程引擎1、Activiti工作流的主要组件2、Activiti工作流有什么优势3、Activiti工作流service有哪些4、流程实例和执行对象的区别5、工作流中一个任务完成后存在多条连线如何处理6、Activiti工作流中排他网关和并行网关都能执行什么功能7、分配个人任务的三种方式8、个人任务和组任务的查询一样吗 综合性问题1、生产环境发生内存泄露怎么排查问题 java 基础 1、JDK 和 JRE的区别 2、 和equals的区别 比基本类型比较值 比引用类型比较引用。 equals本质上就是 String、integer等重写了equals方法把它变成了值比较。 3、String、StringBuffer、StringBuilder String 每次操作都会生成新的String对象 StringBuffer 线程安全的所有公开方法都是 synchronized 修饰的 StringBuilder 非线程安全的性能更高一些 4、String str “a”、 new String(“a”)一样吗 前者会放到常量池后者放到堆内存 5、ArrayList 和 LinkedList的区别 ArraList 是基于数组实现的线性表尾部插入和数据访问效率高 LinkedList是双向链表中间插入和头部插入效率高查询效率低 6、HashMap的原理与实现 数组HashMap底层由一个数组组成数组的每个元素称为一个桶存一个或多个Entry。链表多个键值对映射到同一个桶会发生哈希冲突。哈希冲突后使用链表将冲突的键值对连接起来。这就是所谓的“数组 链表”的散列数据结构。红黑树Java 1.8 开始当链表的长度超过一定阈值默认为 8时链表会转换为红黑树。红黑树是一种自平衡的二叉查找树能够提高 HashMap 的查询效率。 6.1、容量与扩容 HashMap 的默认大小是1616是为了确保算出来的值足够随机 当容量到达阈值的时候会触发扩容阈值容量加载因子160.7512。 每次扩容是之前容量的2倍。 6.2、扩容机制 JDK 1.7空参构造函数内部是空数组第一次put初始化数组。 JDK1.8 : 空参构造函数内部是null第一次put初始化数组。 7、HashMap中的put方法执行过程 1、判断键值对数组是否为空null或者length0是的话就执行resize()方法进行扩容。 2、不是就根据键值key计算hash值得到插入的数组索引i。 3、判断索引i这个位置是否是null如果是就新建节点。如果不是判断首个元素是否和key一样一样就直接覆盖。 4、如果位置I的首个元素和key不一样判断是否是红黑树如果是红黑树直接在树中插入键值对。 5、如果不是红黑树开始遍历链表判断链表长度是否大于8如果大于8就转成红黑树在树中执行插入操作如果不是大于8就在链表中执行插入在遍历过程中判断key是否存在存在就直接覆盖对应的value值。 6、插入成功后就需要判断实际存在的键值对数量size是否超过了最大容量threshold如果超过了执行resize方法进行扩容。 8、ConcurrentHashMap工作原理 Jdk1.7 JDK1.8 JDK1.7结构为segment数组链表通过继承 ReentrantLock加分段锁。每次需要加锁的操作锁住的是一个 segment这样只要保证每个 Segment 是线程安全的。 JDK1.8放弃了锁分段的概念使用NodeCASSynchronized的方式实现并发的结构为数组链表红黑树 9、SimpleDateFormat是线程安全的吗 DateFormat的所有实现都是线程不安全的。 10、java.util.Date 与 java.sql.Date 有什么区别 java.util.Date表示一个日期和时间通常用于表示一个时间戳。 java.sql.Date是java.util.Date的子类它只表示日期不包含时间。 11、对象被置为null垃圾回收器会立即释放占用的内存吗 不会这个对象可能被回收 12、java的数据结构有哪些 线性表、链表、栈、队列、map、树 13、java中异常分为几种 编译时异常、运行时异常 编译时异常空指针异常、数值转换异常、数组越界异常等 14、Error与Exception的区别 Error和Exception都继承了Throwable类 。 异常可以通过程序捕捉。Error是系统错误通常比较严重。 15、java的单模式 饿汉式默认创建对象 懒汉式第一次使用时创建对象 饿汉式1、静态变量2、静态代码块 懒汉式3、静态变量初始化方法加载4、同步方法5、同步代码块 6、双重检查 7、静态内部类利用jvm对静态内部类在使用时加载的机制 8、枚举 16、哪些集合是线程安全的 1、Vector (vector比arraylist多个synchronized同步因此系统开销比arraylist大) 2、hashTable 3、ConcurrentHashMap 17、synchronized原理 synchronized主要有三种使用方式修饰普通同步方法、修饰静态同步方法、修饰同步方法块。 锁的升级过程 1、无锁不锁住资源多个线程只有一个能修改资源成功其他线程会重试 2、偏向锁同一个线程获取同步资源时没有别人竞争时去掉所有同步操作相当于没锁 3、轻量级锁多个线程抢夺同步资源时没有获得锁的线程使用CAS自旋等待锁的释放 4、重量级锁多个线程抢夺同步资源时使用操作系统的互斥量进行同步没有获得锁的线程阻塞等待唤醒 synchronized关键字三大特性 原子性指令不可分割、 可见性其他线程可看见修改、 有序性代码是顺序执行 volatile关键字只能保证可见性和有序性不能保证原子性也称为是轻量级的synchronized。 18、volatile有什么用 可见性当一个线程修改了 volatile 变量的值其他线程能够立即看到修改后的值。 这是因为 volatile 变量的读写操作不会被缓存在寄存器或其他处理器内部的缓存中而是直接从内存中读取或写入。因此使用 volatile 变量可以确保多线程之间的数据同步。禁止指令重排序编译器或处理器可能会对代码进行优化对指令进行重新排序以提高执行效率。volatile 变量的读写操作不会被重排序这样可以确保指令按照代码中的顺序执行避免了因指令重排序导致的数据不一致问题。原子性volatile 变量在读写操作时具有原子性。这意味着多个线程同时访问 volatile 变量时不会发生冲突。虽然 volatile 变量不保证复合操作的原子性如自增或复合赋值操作但简单的读写操作具有原子性。 19、synchronized关键字可以实现什么类型的锁 悲观锁每次访问共享资源时都会上锁。 非公平锁线程获取锁的顺序并不一定是按照线程阻塞的顺序。 可重入锁已经获取锁的线程可以再次获取锁。 独占锁或者排他锁该锁只能被一个线程所持有其他线程均被阻塞 20、怎么创建不可修改的集合 ListString list new ArrayList();list.add(1);CollectionString listC Collections.unmodifiableCollection(list); // listC不可修改listC.add(2); // listC 报错21、sleep和wait的区别 Sleep是线程内停顿不释放锁自动唤醒sleep 是 Thread 类的静态本地方法Wait要释放锁必须放在 synchronized 块里面需要 notify/ notifyAll 进行唤醒wait 是 Object 类的本地方法。Wait可能还是有机会重新竞争到锁继续执行的。 22、jvm内存结构 1、程序计数器指向当前线程正在执行的字节码指令的行号。 2、本地方法栈Native方法。 3、栈虚拟机栈每个Java方法在被调用的时候都会创建一个栈帧用来存储局部变量表八大原始类型、封装类型、作数栈、动态链接、方法出口。 4、堆对象实例、数组 5、方法区各个线程共享的内存区域存储类的结构信息例如运行时常量池字段通过引用常量池中的常量来描述和方法等数据以及方法和构造函数的代码包括用于类和实例初始化以及接口初始化的特殊方法。 23、运行时数据区 24、堆结构jdk1.8 25、java垃圾回收算法 标记-清除算法 1、标记从根节点出发遍历对象对访问过的对象打上标记 2、清除对没有标记的对象进行回收 标记-整理算法 1、标记从根节点出发遍历对象对访问过的对象打上标记 2、让所有存活的对象都向一端移动然后直接清理掉端边界以外的内存 复制算法用在新生代把可用的对象从一个地方拷贝到另一个地方 三色标记法CMS、G1垃圾回收器都使用了三色标记法。 白色没有标记的对象垃圾对象 灰色该对象已标记对象下的属性还没全被标记 黑色该对象已标记对象下的属性也全被标记 分代回收算法堆空间分为新生代和老年代 Minor GC 新生代回收 Major GC 老年代回收出现了 Major GC经常会伴随至少一次的 Minor GC。 Full GC : 新生代 老年代回收 可达性分析算法以GC Roots为起始点,从上至下的方式搜索被根对象集合所连接的目标对象是否可达。内存中的存活对象都会被根对象集合直接或间接连接着搜索所走过的路径称为引用链。 26、垃圾回收器 JDK1到JDK13的发展历程中一共出现了10种垃圾回收器 Serial串行收集器新生代只使用一条GC线程进行垃圾回收过程中暂停其他工作线程。Parallel Scavenge并行收集器新生代复制算法实现并行多线程回收器常用于新生代。CMS 老年代标记-清除算法实现最后会产生许多内存碎片到达一定量时交由串行收集器处理。G1 主要作用于老年代标记-整理算法实现。 各个收集器的Full GC: 27、GC Roots 可以是哪些 栈中引用的对象、本地方法栈内引用的对象、静态属性引用的对象、常量引用的对象、同步锁 synchronized 持有的对象、虚拟机内部的引用、反映 java 虚拟机内部情况的 JMXBean、JVMTI 中注册的回调、本地代码缓存等 28、引用类型有哪些 强引用new出来的对象就是强引用垃圾回收器不会回收 软引用new SoftReference()内存不足时回收 弱引用第一次GC回收时扫到了回收。ThreadLocal的map的key是弱引用 虚引用虚引用主要用来跟踪对象的回收清理被销毁对象的相关资源。 29、java的IO流分为几种 按功能分输入流、输出流 按类型分字节流8个字节为单位、字符流16 30、BIO、NIO、AIO BIO同步阻塞IO使用简单并发处理能力低 NIO同步非阻塞IO通过channel实现多路复用 AIO异步非阻塞IO基于事件和回调机制 31、NIO直接缓冲区与非直接缓冲区 缓冲区分配方式 非直接缓冲区通过allocate()方法分配缓冲区将缓冲区建立在 JVM 的内存中。 直接缓冲区通过allocateDirect()方法分配直接缓冲区将缓冲区建立在物理内存中。数据传输效率 非直接缓冲区在操作系统和 JVM 之间进行数据传输可能涉及到内存复制操作因此相对较慢。 直接缓冲区由于直接建立在物理内存中可以减少内存复制操作提高数据传输效率。 32、NIO内存映射到缓存 将文件或文件的一部分映射到内存中的技术。通过内存映射文件可以以字节数组的方式访问文件内容而无需进行昂贵的系统调用。 33、序列化和反序列化 把当前jvm进程中的对象传输到另一个进程里面进行恢复。序列化后进行传输恢复就是反序列化。 常用的序列化工具json、xml、kyro、hessian等 网络基础 1、TCP 三次握手 1、客户端请求建立连接 2、服务端应答并请求建立连接 3、客户端确认客户端应答 2、TCP 四次挥手关闭连接 1、客户端请求断开连接 2、服务端确认应答 3、服务端请求断开连接 4、客户端确认应答 3、TCP与UDP的区别 TCP面向连接的协议一个TCP连接必须要经过三次“对话”才能建立起来。TCP保证数据正确性、数据顺序UDP一个非连接的协议传输数据之前源端和终端不建立连接。UDP可能丢包、不保证顺序 4、请求出现503是什么问题 503 错误是 HTTP 协议中的一种服务器错误表示服务器暂时无法处理请求。这个错误通常发生在服务器维护、过载或者遇到了意外的问题时。 1、确认问题首先确认问题是否存在。可以通过监控系统、日志或者与前端开发人员沟通来了解是否存在 503 错误。2、分析错误原因一旦确认存在 503 错误需要分析错误的原因。这可能包括服务器过载、硬件故障、软件错误、配置问题等。3、制定解决方案根据错误原因制定相应的解决方案。以下是一些建议 如果是服务器过载可以考虑增加服务器数量、优化数据库查询、限制并发连接数等。 如果是硬件故障及时更换硬件或升级服务器。 如果是软件错误或配置问题修复代码或配置错误。 考虑使用负载均衡器分发请求以避免单个服务器过载。 优化代码减少不必要的资源消耗。4、实施解决方案根据解决方案修改代码、配置服务器或其他相关组件。 测试验证在实施解决方案后需要对系统进行测试确保 503 错误已得到解决并且不会影响其他请求的正常处理。5、预防措施为防止 503 错误再次发生可以采取以下措施定期检查、监控系统、制定应急预案以应对突发情况。 spring 1、spring boot启动流程 1、首先从main找到run方法在执行run之前new一个springApplication对象 2、进入run方法创建应用监听器 3、加载配置文件 4、加载应用上下文当作run方法的返回对象 5、创建spring容器实现自动配置和bean的实例化 2、spring bean的实例化 两个阶段容器启动阶段、bean实例化阶段 容器启动阶段加载元数据、对各种处理器进行注册、上下文初始化、事件广播初始化 Bean实例化 1、加载Bean定义spring从配置文件或注解中加载bean定义 2、实例化Bean: 根据bean的定义创建bean实例。如果bean定义中指定了初始化方法spring会在实例化后调用这些方法。 3、属性赋值如果bean中定义了属性spring会使用属性值或构造器参数对属性进行赋值。 4、Bean注册将Bean实例注册到Spring容器中以便在其他地方使用。 3、Spring的ioc ioc中文名控制反转另一名称DI依赖注入。IOC是指利用反射的原理将创建对象的权利交给Spring容器spring在运行的时候根据配置文件来动态的创建对象和维护对象之间的关系实现了松耦合的思想。 4、Spring的aop 面向切行期间不修改源码对已有方法进行增强。 配置方式基于注解配置aop、基于XML的Aop、编程式创建代理 AOP有哪些实现方式 AOP有两种实现方式静态代理编译时增强和动态代理运行时创建。动态代理的两种实现方式 JDK动态代理通过接口实现代理类根据目标类实现的接口动态生成不需要自己编写 CGLIB动态代理通过继承实现。 5、Spring的类加载机制 Springboot中的类SPI扩展机制 在springboot的自动装配过程中最终会加载META-INF/spring.factories文件而加载的过程是由SpringFactoriesLoader加载的。从CLASSPATH下的每个Jar包中搜寻所有META-INF/spring.factories配置文件然后将解析properties文件找到指定名称的配置后返回。需要注意的是其实这里不仅仅是会去ClassPath路径下查找会扫描所有路径下的Jar包只不过这个文件只会在Classpath下的jar包中。 6、Java类加载机制 jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器 启动类加载器、扩展类加载器、应用程序类加载器。每一个中类加载器都确定了从哪一些位置加载文件。也可以通过继承java.lang.classloader实现自己的类加载器。 7、双亲委派模型 当一个类加载器收到类加载任务时会先交给自己的父加载器去完成因此最终加载任务都会传递到最顶层的启动类加载器只有当父加载器无法完成加载任务时才会尝试自己来加载。 8、Spring怎么解决循环依赖 A依赖于BB依赖于CC又依赖于A 解决办法 1、Spring首先从一级缓存“SingletonObjects”中获取。 2、获取不到并且对象正在创建中就再从二级缓存“earlySingletonObjects”中获取。 3、如果还是获取不到且允许singletonFactories通过getObject()获取就从三级缓存singletonFactory.getObject()(三级缓存)获取。 4、如果从三级缓存中获取到就从singletonFactories中移除并放入earlySingletonObjects中。其实也就是从三级缓存移动到了二级缓存。 无法解决的循环依赖A依赖于BB依赖于A 9、Spring 用到了哪些设计模式 工厂模式spring在使用getBean()调用获得该bean时会自动调用该bean的getObject()方法。每个 Bean 都会对应一个 FactoryBean如 SqlSessionFactory 对应 SqlSessionFactoryBean。单例模式一个类仅有一个实例提供一个访问它的全局访问点。适配器模式Spring提供了一个适配器接口每一种 Controller 对应一种 HandlerAdapter 实现类当请求过来SpringMVC会调用getHandler()获取相应的Controller然后获取该Controller对应的 HandlerAdapter最后调用HandlerAdapter的handle()方法处理请求实际上调用的是Controller的handleRequest()。每次添加新的 Controller 时只需要增加一个适配器类就可以无需修改原有的逻辑。代理模式spring 的 aop 使用了动态代理有两种方式Jdk动态代理和Cglib动态代理。模板模式Spring 中 jdbcTemplate、hibernateTemplate 等就使用到了模板模式。 10、设计模式的六大原则 开闭原则 一个软件实体应该通过扩展来实现变化而不是通过修改已有的代码来实现变化依赖倒转原则 面向接口编程里氏代换原则 只要父类能出现的地方子类就可以出现而且替换为子类也不会产生任何错误或异常单一职责 一个类/方法尽可能只做一件事迪米特法则 对象与对象间因该尽可能独立少调用其他对象的方法接口隔离原则 每个接口的功能应该是独立的 11、spring的事务和分布式事务 Spring里面的事务本质上是数据库层面的事务主要是针对单个库中的对个表的操作。 分布式事务主要解决多个库直接数据一致性问题。 12、分布式事务的实现方式 1、使用数据库事务 MySQL 的 XA 事务、 Oracle 的 RAC 事务 2、分布式事务中间件例如可以使用 Spring 框架提供的分布式事务支持通过配置事务管理器、事务传播行为等来实现分布式事务。 3、使用消息队列将事务操作转化为消息通过消息队列进行异步处理保证事务的最终一致性。 4、采用分布式锁通过对分布式环境中的共享资源进行加锁保证事务的原子性和一致性。可以使用如 Redis、ZooKeeper 等分布式锁实现。 5、采用分布式缓存通过将数据缓存在分布式缓存中减少对数据库的访问提高并发性能同时保证数据的一致性。如使用 Redis、Memcached 等分布式缓存技术。 6、使用 TCC机制分为三个阶段分别在事务主动方、事务被动方和协调器之间进行。通过 try、commit 和 confirm 操作来保证分布式事务的一致性。 13、分布式锁 1、什么是分布式锁 系统内有多个消费者需要对同一共享数据并发访问和消费时会有线程安全问题。例如在秒杀、抢优惠券等场景下商品库存的数量是有限的在高并发下会有超买或超卖的问题。因此我们需要使用锁解决多线程对共享数据并发访问的线程安全问题。 2、为什么要用分布式锁 当系统使用分布式架构时服务会有多个实例存在。需要使用分布式锁保证一个资源在同一时间内只能被一个服务的同一个线程执行。 3、redis分布式锁 通过代码调用setnx命令只在键不存在的情况下 将键的值设置为某个值。若键已经存在 则setnx命令不做任何动作。为了能处理获取该锁的请求所在的服务实例宕机会导致该资源被长期锁住其他请求无法获取该锁这种情况我们还需要设置超时时间。 4、redis分布式锁缺陷 1、强依赖redis的可用性一旦redis宕机会导致业务系统不可用因此最好搭建redis集群。 2、因为对锁设置了超时时间如果某次请求不能在该次限制时间内完成操作也会导致在某些时刻多 个请求获取到锁。 解决方案也很简单我们在调用setnx时将值设置为该次请求线程的id并且在服务实例内设置一个守护线程当锁快要超时时判断请求是否完成如果未完成延长超时时间。 mysql 1、事务四大特性 原子性、 一致性事务执行之前数据库是一致的那么执行后也是、 隔离性事务间隔离、 持久性数据的改变是持久的 2、事务的隔离级别 读未提交能读取到其他事务没提交的脏读、不可重复读、幻读 读已提交读取到其他事务提交后的不可重复读、幻读 可重复读给事务读取的数据加上版本号一个事务内两次读取一致幻读 串行化一个事务完成才能执行下一个事务 3、脏读、重复读、幻读 脏读读到其他事务还没有提交的可能后面又发生了回滚或修改就是脏数据 不可重复读同一条数据同一个事务中两次读取结果不一样 幻读同一个事务两次读取的数据条数不一样 4、B树和B树的区别 B树特点 1、节点是排序的 2、一个节点可以存多个元素这多个元素也是排序了B树的特点 1、有B树的特点 2、叶子节点之间有指针 3、非叶子节点的元素都会冗余在叶子节点上也就是叶子节点中储存了所有元素并排了序的 5、mysql为什么用B树 1、B树通过对数据进行排序可以提高查询效率 2、一个节点储存多个元素B树节点索引数据B树节点仅索引叶子节点索引数据使得B树不会太 高一个innodb页默认16k,一般两层B树存2千万左右数据 3、叶子节点存了所有数据可以很好的支持全表扫描、范围查询 4、由于B树不会太高一般三层B树的IO次数比较稳定 6、mysql锁有哪些 行锁锁住一行数据并发度高 表锁锁住整个表并发读低MyISAM 存储引擎只支持表锁 间隙锁锁住某个区间 7、mysql的redolog、binlog、undolog 1、binlog用于记录数据库执行的写入性操作只有在事务提交时才会记录biglogbinlog日志有三种格式分别为STATMENT、ROW和MIXED。使用场景主从复制、数据恢复。 2、RedologInnoDB特有的记录数据页的变更而这种变更记录是没必要全部保存。mysql每执行一条DML语句先将记录写入redo log buffer后续再一次性将记录写到redo log file。因为Innodb是以页为单位进行磁盘交互的1、一个事务很可能只修改一个数据页里面的几个字节这个时候将完整的数据页刷到磁盘太浪费资源。2、一个事务可能涉及修改多个数据页并且这些数据页在物理上并不连续使用随机IO写入性能太差 注意binlog和redo log二者同时记录才能保证当数据库发生宕机重启时数据不会丢失。 redolog 事务日志、binlog数据库变更的逻辑日志 3、undolog保证事务原子性记录了数据的逻辑变化。比如一条INSERT语句对应一条DELETE的undo log对于每个UPDATE语句对应一条相反的UPDATE的undo log这样在发生错误时就能回滚到事务之前的数据状态。 8、mysql二阶段提交 Mysql开启了binlog日志时那么提交事务时就要同时完成redolog和binlog的事务写入。二段提交发生在redolog和binlog的日志写入阶段为了满足数据的一致性设计。 第一阶段prepare阶段事务操作记录到redolog中 记录为prepare状态。 第二阶段commit阶段事务操作记录到binlog中把redolog的状态改为commit。 如果在写入redolog之前崩溃redolog和binlog中为空满足一致性 如果在写入redolog后写入binlog前崩溃redolog中为prepare状态状态可根据redolog恢复。 如果的在binlog写入后崩溃那么redolog可以拿着事务id去执行binlog的日志直接提交数据。 9、mysql什么时候会索引失效 1、没有使用索引列作为where查询条件 2、对索引列进行函数操作字符串操作、日志操作 3、对索引列进行类型转换 4、Like查询时以“%”开头 5、查询条件包括Oror条件中的每个条件都不涉及索引列mysql无法使用索引 6、当使用大范围查询的时候 redis 1、缓存雪崩、缓存击穿、缓存穿透 缓存雪崩大量key同时失效 击穿多个请求获取一个keykey失效时发生击穿到数据库 穿透缓存中没有key,数据库中也没有造成资源一直访问数据库 2、会员中有大量要过期怎么处理 1、系统不主动轮询等用户登陆系统时触发检查缺点无法主动发送提醒 2、用搜索引擎如es,存储一份会员ID和过期时间到搜索引擎中搜索引擎能够实现快速检索 3、使用redis实现把id和过期时间存到redis中使用redis过期提醒功能 当key过期后触发过期事件。 4、使用MQ里面的延迟队列用户开通会员后计算会员过期时间发送延迟消息到MQ里面达到时间进行消费。 多线程 1、线程同步的方法 Wait(): 让线程等待将线程存储到一个线程池中。Notify(): 唤醒被等待的线程通常都唤醒线程池中的第一个让被唤醒的线程处于临时阻塞状态。NotifyAll(): 唤醒同一个锁的所有的等待线程。必须在同步代码块中调用此方法否则抛出异常。wait()和notify()系列方法这样设计的目的是防止死锁或永久等待发生。notifyAll()执行后只有一个线程能得到锁其他没有得到锁的线程会继续保持在等待状态。 注意 1、调用完notifyAll()方法后同步代码块中的其他代码必须执行完后才能将对象锁释放而不是调用了notifyAll()方法后立即释放。 2、在java中Thread类线程执行完run()方法后一定会自动执行notifyAll()方法。 2、什么是ThreadLocal以及其实现原理 ThreadLocal是一种线程隔离机制提供了多线程环境下对于共享变量访问的一个安全性。 在每个线程里面都有一个容器来存储共享变量的一个副本然后每个线程只对自己的变量副本进行更新操作。 实现原理 在Thread类里面有一个ThreadLocalMap,用来存储共享变量的副本线程仅对这个副本进行操作不影响全局共享变量的值实现数据隔离。 3、为什么要使用线程池 1、降低线程开启关闭消耗的系统资源 2、提高系统响应速度线程开启响应速度慢 3、线程管理线程开启、关闭、线程数量等 4、线程池执行过程 简述任务进线程池先判断核心线程是否满了满了就进队列队列满了就看最大线程数是否已达到达到了就按饱和策略处理。未达到饱和就创建线程执行任务。 核心线程 - 队列 - 最大线程数 - 饱和策略 5、线程池的创建方式 1、固定大小线程池 2、缓存线程池 3、单线程线程池 4、延迟任务线程池 5、单线程延迟任务线程池 6、抢占式线程池 7、自定义线程池ThreadPoolExecutor 7个参数 6、线程池的7个参数 1、核心线程数 2、最大线程数 3、线程存活时间 4、线程存活时间单位 5、工作队列 6、线程工厂 7、拒绝策略 7、线程池队列有哪些 1、直接提交队列没有容量插入一个就会阻塞执行删除才会唤醒 2、有界任务队列达到队列最大值开启新的线程否则一直是核心线程该队列现进先出有数组和链表两种实现 3、无界任务队列这种队列下最大线程数是无效的只有核心线程 4、优先任务队列特殊的无界队列使用平衡二叉树堆实现排队时带有优先级 8、线程池拒绝策略有哪些 1、丢弃任务抛弃异常 2、直接丢弃任务 3、丢弃队列最前面的任务 4、调用线程提交任务的线程直接执行此任务 5、new RejectedExecutionHandler() 自定义拒绝策略 9、线程池的关闭 shutdown 当任务队列为空的时候才关闭线程池 shutdownnow 直接停止 10、使用无界队列的线程池会导致内存飙升吗 会的newFixedThreadPool使用了无界的阻塞队列LinkedBlockingQueue如果线程获取一个任务后任务的执行时间比较长会导致队列的任务越积越多导致机器内存使用不停飙升 最终导致OOM。 11、线程创建的几种方式 1、继承Thread重写run方法 2、实现Runnable接口创建线程无返回值 3、实现Callable接口Future创建线程有返回值可抛出经过检查的异常 12、Future有什么用 可以对正在执行的任务进行维护操作(取消任务、获取任务执行结果、判断任务是否已完成等)。 13、FutureTask有什么用 1、可取消的异步计算 2、利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法此类提供了对Future的基本实现 3、可使用FutureTask包装Callable或Runnable对象因为FutureTask实现了Runnable所以可将FutureTask提交给Executor执行 4、仅在计算完成时才能获取结果如果计算尚未完成则阻塞get方法一旦计算完成就不能再重新开始或取消计算 14、线程的生命周期状态 新建可运行阻塞处于阻塞状态的线程不会占用CPU资源阻塞IO操作执行完线程可转换为可运行状态等待执行object.wait()或thread.join()变成等待notify()或加入的线程执行完毕会转为可运行固定时间等待不会无限期地等待如果线程没有在指定时间内完成操作自动转换为可运行终止状态 15、 i是线程安全的吗 i不是原子性操作执行它包括三个操作读i的值、i1、将新值保存到内存。 所以它不是线程安全的。 16、可重入锁ReentrantLock 可重入当一个线程获得一个对象锁后再次请求该对象锁时可以再次获得该对象的锁。 16.1、Synchronized和ReentrantLock的相同 1、都是独占锁 2、都是可重入的 16.2、Synchronized和ReentrantLock的不同 1、ReentrantLock是Java层面的实现手动加锁手动解锁synchronized是JVM层面的实现。 2、ReentrantLock可以实现公平和非公平锁。 3、ReentantLock获取锁时限时等待配合重试机制更好的解决死锁 4、ReentrantLock可响应中断 5.使用synchronized结合Object上的wait和notify方法可以实现线程间的等待通知机制。ReentrantLock结合Condition接口同样可以实现这个功能。 17、synchronized可重入锁的实现原理 1、每一个可重入锁都会关联一个线程ID和一个锁状态status。 2、当一个线程请求方法时会去检查锁状态 如果锁状态是0代表该锁没有被占用直接进行CAS操作获取锁将线程ID替换成自己的线程ID。如果锁状态不是0代表有线程在访问该方法。此时如果线程ID是自己的线程ID – 可重入锁将status自增1然后获取到该锁进而执行相应的方法。 – 非重入锁进入阻塞队列等待。 3、释放锁时 可重入锁每一次退出方法就会将status减1直至status的值为0最后释放该锁。非可重入锁直接就会释放该锁。 Activiti流程引擎 1、Activiti工作流的主要组件 Activity(活动)、workflow(流程)、workItem工作项、rule(规则)、状态state 2、Activiti工作流有什么优势 1、提供了可视化的方式进行描述和执行业务流程 2、支持业务逻辑的可重用性和模块化开发 3、支持监控和追踪业务流程 4、扩展性比较好 3、Activiti工作流service有哪些 1、RepositoryService 流程定义和部署对象 2、RuntimeService 执行管理包括流程实例和执行对象 3、TaskService 执行任务正在流程中的 4、HistoryService 历史管理 5、IdentityService 用户角色 4、流程实例和执行对象的区别 流程实例一个流程中流程实例只有一个 流程对象按照流程定义的规则执行一次操作一个流程中执行对象可以多个 5、工作流中一个任务完成后存在多条连线如何处理 1、使用流程变量 2、当一个任务完成之后根据这几条连线的条件和设置流程变量例如${流程变量名’值’}{}符号是布尔类型判断走哪条线。 6、Activiti工作流中排他网关和并行网关都能执行什么功能 排他网关分支通过连线的流程变量判断执行哪条连线如果条件不符合默认离开连线。只执行其中一个流程 并行网关可以同时执行多个流程直到总流程结束。可以对流程进行分支和聚合。 7、分配个人任务的三种方式 1、直接给值在Xxxx.bpmn中指定 2、流程变量${流程变量名}或#{} 3、用监听类指定任务办理人setAssgnee 8、个人任务和组任务的查询一样吗 1、不一样 2、都是用TaskService完成 3、个人任务taskAssgnee,组任务taskCandidateUser 4、数据库存放个人任务参与组任务类型、参与、候选 综合性问题 1、生产环境发生内存泄露怎么排查问题 1、什么是内存泄露 程序在运行过程中因为某些原因导致不需要的对象仍然占用jvm内存空间并且无法回收。导致占用内 存越来越大出现OOM。2、内存泄露出现的现象 频繁FULL GC、内存暂用量过大无法释放3、怎么定位问题 是否是内存泄露老年代逐步增长Full gc卡顿年轻代内存一直在高位无法释放频繁full GC? 使用jstat命令查看虚拟机中各个内存的使用情况、GC情况 使用dump工具把内存dump下来使用MAT工具进行分析。Mat会分析dump文件的内容给出分析结果定位到有问题的类然后找到有问题代码进行优化。 一般情况可是循环引用、内存对象泄露没有销毁、动态分配内存后没有释放、长期持有对象引用、资源未关闭等情况造成的内存泄露
http://www.pierceye.com/news/362165/

相关文章:

  • 网站返回首页怎么做的好看自贡网站优化
  • 自己的网站如何做推广wordpress积分与奖励
  • 产品包装设计网站网站建设 中企动力宜昌
  • 英语营销型网站建设北京pk10网站开发
  • 交换链接适合哪些网站东莞小程序开发制作
  • 医院网站建设网站阿里巴巴网站是用什么技术做的
  • 潍坊 餐饮网站建设淘宝seo优化
  • 樟木头镇网站建设公司WordPress企业响应式主题
  • 怎么给网站做备份呢怎么去建设微信网站
  • 成都各公司网站中小企业网站建设 论文
  • 广告网站建设实训报告做电商从哪里入手
  • 建电子商务网站需要多少钱做网站的简称
  • 制定网站推广方案网络营销网站分析
  • 商城网站系网站 png逐行交错
  • 陕西网站建设陕icp备免费虚拟机安卓
  • 优化教程网站推广排名东莞网站建设推广有哪些
  • 金阳建设集团网站电子商务系统 网站建设
  • 网站建设规模哪里有做app软件开发
  • 建站工具上市手机视频网站设计
  • 代做道具网站做地方门户网站不备案可以吗
  • 电子商务 网站前台功能想做微商怎么找厂家
  • 网站建设电子书做网站引入字体
  • 顺德建设网站公司分发平台
  • 个人门户网站模板下载婚纱摄影网站定制
  • 提高网站流量的软文案例手机腾讯网
  • 网站只做内容 不做外链深圳宝安区天气
  • 生物网站 template淘宝的网站建设怎么建
  • 苏州哪家做网站好些推广之家app
  • 网站开发计入管理费用哪个明细对网站建设的调研报告
  • 南头专业的网站建设公司wordpress数据量大网站访问