
面试题及答案
文章平均质量分 64
qq_16570607
一步一个脚印,在成为优秀程序员的路上。
展开
-
java技术面试题
java线程的创建方式有哪几种?java如何创建线程池?线程池七大参数是什么?如何确定核心线程数?java线程池的submit()和excute()方法有什么区别?java有几种锁?分别是什么?java线程安全类有那些?java集合?java线程通信方式有几种?(线程按顺序执行/线程互相等待/线程交叉执行)java线程的状态有哪几种?jvm预设参数有那些?gc回收算法有那些?gc垃圾收集器有那些?它们之间有什么区别?数据库索引结构?B+树了解多少?vue的生命周期。原创 2024-08-08 15:56:57 · 464 阅读 · 0 评论 -
Dockerfile部署java项目
要想退出 container 时,让 container 仍然在后台运行着,可以使用“docker exec -it”命令。这是一个多步骤的dockerfile,第一步git下载代码,第二步使用maven进行打包,第三步将运行时环境准备好,并设置命令。将DockerFile 配置文件放到 maven项目目录内,和pom.xml同级。/bin/bash:在container中启动一个bash shell。自动检测的文件名为Dockerfile ,使用。: 保持标准输入打开,默认为false;原创 2023-05-09 16:06:13 · 1288 阅读 · 0 评论 -
SpringBoot单元测试断言 assertions
断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 org.junit.jupiter.api.Assertions 的静态方法。加断言可以避免对数据库的误操作,以及缩短测试流程(断言失败就不再执行之后的代码了)上面一个是我测试建的,如果要新建应该选第二个:Create New Test…待测试的Service方法就不贴了,根据自己的实际情况写逻辑就行;也可以设置异常报文,第一个参数是期望值,第二个参数是实际值。会弹出新建测试类的框。原创 2023-04-18 15:00:10 · 1862 阅读 · 0 评论 -
面试题及答案-java后端
#{变量名}可以进行预编译、类型匹配等操作,#{变量名}会转化为jdbc的类型。 select * from tablename where id = #{id} 假设id的值为12,其中如果数据库字段id为字符型,那么#{id}表示的就是’12’,如果id为整型,那么id就是12,并且MyBatis会将上面SQL语句转化为jdbc的select * from tablename where id=?,把?参数设置为id的值。 ${变量名}不进行数据类型匹配,原创 2022-03-10 14:06:55 · 1549 阅读 · 0 评论 -
docker的4种网络模型
我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用–net=host指定。 container模式,使用–net=container:NAME_or_ID指定。 none模式,使用–net=none指定。 bridge模式,使用–net=bridge指定,默认设置。 下面分别介绍一下Docker的各个网络模式。 host模式 众所周知,Docker使用了Linux的 Namespace 技术来进行资源隔离,如原创 2022-03-05 10:35:15 · 688 阅读 · 0 评论 -
Spring Cloud Hystrix 线程池队列的正确配置
背景 有一次在生产环境,忽然出现了不少笔还款单被挂起,后来排查缘由,发现是内部系统调用时出现了Hystrix调用异常。在开发过程当中,由于核心线程数设置的比较大,没有出现这种异常。放到了测试环境,偶尔有出现这种状况,后来在网上查找解决方案,网上的方案是调整maxQueueSize属性就行了,当时调整了一下,确实有所改善。可没想到在生产环境跑了一段时间后却又出现这种了状况,此时我第一想法就是去查看maxQueueSize属性,但是maxQueueSize属性是设置值了。当时就比较纳闷了,为何maxQueueS原创 2022-03-05 09:47:18 · 2906 阅读 · 0 评论 -
java编码技巧
如果列表里面的内容与上次相比并无区别,则不往下处理 熔断规则表设计 CREATE TABLE `degrade_rule` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `resource_name` varchar(256) NOT NULL COMMENT '资源名称', `count` double NOT NULL COMMENT '慢调用时长,单位 毫秒', `slow_ratio_threshold` d原创 2022-03-04 15:49:33 · 443 阅读 · 0 评论 -
如何优雅的关闭Java线程池
线程中断 在程序中,我们是不能随便中断一个线程的,因为这是极其不安全的操作,我们无法知道这个线程正运行在什么状态,它可能持有某把锁,强行中断可能导致锁不能释放的问题;或者线程可能在操作数据库,强行中断导致数据不一致混乱的问题。正因此,JAVA里将Thread的stop方法设置为过时,以禁止大家使用。 一个线程什么时候可以退出呢?当然只有线程自己才能知道。 所以我们这里要说的Thread的interrrupt方法,本质不是用来中断一个线程。是将线程设置一个中断状态。 当我们调用线程的interrupt方法,它原创 2022-03-03 15:19:27 · 1104 阅读 · 0 评论 -
java设计模式实际应用场景实例
常用设计模式 策略模式、模板方法、工厂模式、单例模式 业务场景 营销拉新活动。 实例一:工厂模式+抽象 定义抽象业务接口 public abstract class AwardAbstract { public abstract Boolean award(String userId); } 定义具体业务实现类 // 头条渠道发放奖励业务 public class TouTiaoAwardService extends AwardAbstract { @Override publi原创 2022-03-02 11:26:33 · 922 阅读 · 0 评论 -
10道线程池面试题
面试题1:ThreadPoolExecutor 有哪些常用的方法? ThreadPoolExecutor有如下常用方法: submit()/execute():执行线程池 shutdown()/shutdownNow():终止线程池 isShutdown():判断线程是否终止 getActiveCount():正在运行的线程数 getCorePoolSize():获取核心线程数 getMaximumPoolSize():获取最大线程数 getQueue():获取线程池中的任务队列 allowCoreThr原创 2021-07-30 15:44:36 · 1193 阅读 · 0 评论 -
技术知识随机二
JWT(json web token) 适合使用JWT的场景 有效期短 只希望被使用一次 比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。 ...原创 2021-07-27 15:29:09 · 103 阅读 · 0 评论 -
接口幂等性方案
幂等性方案 只要涉及到了重试,那么必须上接口的幂等性保障机制。 试想一下,你要是对一个接口重试了好几次,结果人家重复插入了多条数据,该怎么办呢? 其实幂等性保证本身并不复杂,根据业务来,常见的方案: 可以在数据库里建一个唯一索引,插入数据的时候如果唯一索引冲突了就不会插入重复数据 或者是通过redis里放一个唯一id值,然后每次要插入数据,都通过redis判断一下,那个值如果已经存在了,那么就不要插入重复数据了。 类似这样的方案还有一些。总之,要保证一个接口被多次调用的时候,不能插入重复的数据。原创 2021-07-22 15:26:49 · 113 阅读 · 0 评论 -
技术知识随记
工厂模式将对象的创建和使用分开。抽象工厂模式体现为定义一个抽象工厂类,多个不同的具体工厂继承这个抽象工厂类。对于不同产品系列有比较多共性特征时,可以使用抽象工厂模式,有助于提升组件的复用性。SPI的全名为Service Provider Interface。简单的总结下java SPI机制的思想。我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。原创 2021-07-02 10:35:00 · 553 阅读 · 0 评论 -
技术知识随记三
Mybatis中 #{}和${}的区别 #{}的用法 <select id="getUserByNameAndPsw" resultType="com.hotel3.model.User"> select * from USER where userName=#{userName} and userPassword =#{userPassword}; </select> 结果: ==> Preparing: select * from USER where userNa原创 2021-07-12 14:20:52 · 130 阅读 · 0 评论