少主网络建站,拼团网站建设,中国知名网站排名,关于门户网站建设报告本文为Java面经#xff0c;其中讲述的是在面试过程中回答得不好的地方#xff0c;在这里补充#xff0c;以便为后面的面试积累经验
哈罗单车
一面
Q#xff1a;公司的MySQL数据库#xff0c;事务隔离级别是什么#xff1f;
A#xff1a;读已提交#xff08;RC其中讲述的是在面试过程中回答得不好的地方在这里补充以便为后面的面试积累经验
哈罗单车
一面
Q公司的MySQL数据库事务隔离级别是什么
A读已提交RC一个事务在执行过程中允许访问其他事务成功提交新插入的数据又能访问修改成功的数据。读取数据的事务允许其他事务继续访问该行数据但未提交的写事务将禁止其他事务访问改行。可以防止脏读不能防止不可重复读和幻读。 Q公司的营销配置端应用机器规格配置和JVM是如何设置的。
A一开始是4核8G60G后面升级到了8核16G100G。使用4核8G60G时JVM的xms和xmx设置的都是4G使用8核16G100G时xms和xmx都设置成了8G。MetaSpace设置成了512M。xms是jvm heap堆内存最小值即初始化分配的空间。xmx是jvm heap堆内存最大允许值即设定了程序运行期间最大可占用内存的大小超过了这个值的大小会导致OOM
二面
Q实现多线程的方式有哪些
A①继承Thread类重写其run方法来实现多线程②实现Runnable接口重写run方法③实现Callable接口重写call方法并使用FutureTask类来包装Callable对象使用FutureTask对象作为Thread对象的target创建并调用start方法启动线程④通过线程池实现多线程 Q线程池一般用哪些线程池
A①自定义线程池②通过Executors创建的线程池包含SingleThreadExecutor、、CachedThreadPool、FixedThreadPool和ScheduledThreadPool。 CachedThreadPool可缓存线程池若线程池长度超过处理需要可灵活回收空闲线程若无可回收则新建线程该线程池最大程度保证每个请求都能立即被处理。缺点由于最大线程数被允许为Integer.MAX_VALUE当线程数过多时会导致OOM。 FixedThreadPool定长线程池可控制线程池最大并发数超出的线程会在队列中等待。缺点由于LinkedBlockingQueue队列是无参构造默认可存放的队列容量为Integer.MAX_VALUE当队列中等待的对象过多时会导致OOM。 ScheduledThreadPool周期性线程池支持任务定时及周期性执行。缺点同CachedThreadPool。 SingleThreadExecutor单线程化线程池只有一个工作线程可执行保证所有线程顺序执行。缺点同FixedThreadPool。 Q自定义线程池由哪些部分组成运行的原理是什么
A自定义线程池主要由corePoolSize核心线程数、maximumPoolSize最大线程数、keepAliveTime线程空闲时间、unitkeepAliveTime的时间单位、workQueue阻塞队列threadFactory线程工厂和handler拒绝策略的执行器组成。 自定义线程池工作原理 提交任务判断corePoolSize是否已满若未满则判断是否有空闲线程若没有空闲线程则创建新线程来执行任务若有空闲线程则直接使用空闲线程执行任务若corePoolSize已满则判断workQueue是否已满若workQueue未满则将提交的任务放入workQueue中等待核心线程池执行若workQueue已满则判断maximumPoolSize是否大于corePoolSize若小于等于则将新提交的任务交由拒绝策略执行器处理若maximumPoolSize大于corePoolSize且当先提交线程数大于maximumPoolSize则将新提交的任务交由拒绝策略执行器处理若maximumPoolSize大于corePoolSize且maximumPoolSize最大线程数未满则将新提交的任务创建新的线程来执行任务当线程池中超过corePoolSize部分的线程在其空闲时间超过keepAliveTime和unit的单位时间后就关闭这部分的线程使之最终缩减为corePoolSize个线程。如果设置了allowCoreThreadTimeout为ture则所有线程池中空闲线程超过keepAliveTime后就会被关掉最终空闲线程数会缩减为零个 Q线程池中用到的阻塞队列有哪些是有界的吗
A一般使用到的有ArrayBlockingQueue和LinkedBlockingQueue都是有界的。其他还有DelayQueue和PriorityBlockingQueue等都是无界的。