
java知识
文章平均质量分 65
打造扎实的基础,让编码得心应手
半生程序员
每天都要学习,进步一点。
每天努力把该做的都做好,当一个人开始转运的时候,又碰到了机会,也就翻身了,这也许就是运气。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
死锁是什么?死锁的字节码指令了解?
需要注意的是,不同的解决方式适用于不同的场景和问题,选择合适的方式需要根据具体情况进行评估。使用资源剥夺:当一个线程请求资源时,如果资源已经被其他线程占有,则可以暂时剥夺其他线程对该资源的锁定,以满足当前线程的需求。破坏请求与保持条件:允许线程在请求资源时一次性获取所有需要的资源,或者在获取某个资源时释放已经占有的资源。使用超时机制:在获取锁资源时设置一个超时时间,在规定时间内无法获取到资源则放弃获取,释放已占有的资源,然后重新尝试。打破死锁的方式有多种,只要四个死锁的必要条件去其一就可以了。原创 2023-09-04 16:59:07 · 1724 阅读 · 19 评论 -
2023面试系列 线程池用过居然不知道底层原理,啥也不是!
线程池通过使用CAS跟AutomicInteger来改变线程数量跟线程状态,核心参数用Volatile来修饰,同时使用Condition、ReentrantLock对创建线程的过程,线程池状态的改变,工作任务数量的改变(添加跟删除)等,来通过allowCoreThreadTimeOut || wc > corePoolSize来判断使用poll还是take方法或者任务,Worker同时也继承了AQS(不可重入,线程运行时就不会中断)1.合理的设置核心线程、最大线程数,充分利用资源,同时也要避免资源的浪费。原创 2023-09-03 08:02:37 · 711 阅读 · 51 评论 -
2023应届生java面试紧张失误之一:CAS口误说成开心锁-笑坏面试官
乐观锁是对于数据冲突保持一种乐观态度,操作数据时不会对操作的数据进行加锁(这使得多个任务可以并行的对数据进行操作),只有到数据提交的时候才通过一种机制来验证数据是否存在冲突(一般实现方式是通过加版本号然后进行版本号的对比方式实现);本质上是CPU的一个指令集,能够提供的一个操作,此操作是不停的for 循环,不停的去用这个指令去获取某个内存的地址,如果获取到了,则代表获取到了锁。是一个do while循环的操作,这里有2个操作用于获取对象中偏移地址对应的整型的值。原创 2023-09-03 00:44:37 · 493 阅读 · 2 评论 -
2023年打脸面试官之TCP知识点全方面梳理--边问边答
序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。确认ACK:占1位,仅当ACK=1时,确认号字段才有效。原创 2023-09-02 18:11:14 · 2004 阅读 · 16 评论 -
2023年最新一面二面通关王炸java八股文面试题--持续更新
阿里,飞猪,比亚迪,,极兔快递,跨越速运,平安壹钱包,小天才,信泰寿险,招银网络,同花顺等一面:技术面1. 一面首先简单了解下你的项目经历,面试官会选择他感兴趣的或者跟招聘岗位匹配的部分进行发问2. 八股文+各大公司真题3. 笔试题二面:业务面1. 仔细问你做过的项目的内容,问项目中哪些场景下的问题用什么方式解决,怎么去技术选型2. 给你一个场景,让你设计怎么去完成3. 笔试题三面:领导面+HR1. 了解你离职的理由,个人的发展职业规划2. 项目流程上的问题解决处理。原创 2023-09-02 17:44:50 · 817 阅读 · 8 评论 -
2023年王炸面试题每日一练--为什么会有精度的损失
a. 可以使用BigDecimal,注意:在进行计算的时候,转为String类型,使用BigDecimal提供的方法来实现计算。输入的值为十进制,而在计算的过程中,是要把十进制的小数位值在有限位的情况下转变为二进制的小数,就会出现精度的损失。b. 把小数位转化为整数位存储,如用Long类型,如金钱3.99 金钱单位值的计算可以用分位来表示即399分。原创 2023-09-02 17:33:53 · 724 阅读 · 10 评论 -
2023面试被打脸,数据结构底层都不知道么--回去等通知吧
插入、删除速度快是因为只要通过前后指针就能插入或者删除到链表中,不需要移动其它元素,插入头尾节点更快,因为Node结构体中保存了头尾指针。-查询速度慢是因为,查询先通过右位移运算来判断对链表是前半部分遍历还是后半部分遍历,剩下的半部分遍历则是一个个节点遍历,头尾查询快,因为保存了头尾指针。原创 2023-09-02 09:23:21 · 4434 阅读 · 14 评论 -
循环内的try-catch 跟循环外的try-catch有什么不一样
一位面试管突然问了这么一道基础的面试题,反而秀了面试者一脸,经常用的却被问到时不知道怎么回答,所以我们平时在写代码的时候,要多注意细节跟原理。也许你不服:不就是先这样,再那样,最后就是那样了。可以看到它虽然报错了,但是错误内部消化了,可以继续往下执行,不会影响到整体循环的进行。当然这里显示的只是简单的逻辑,如果要搞些骚操作,那得小心再小心,不然一不小心收到个‘大礼包’2. 当然持续的报错是会消耗掉内存的使用空间的,这个也是需要考虑的问题。可以看到,只要报错了,就直接终止了循环,抛出了错误。原创 2023-08-15 15:08:18 · 1057 阅读 · 0 评论 -
叮!-->常见的错误又来啦:Invalid bound statement (not found): com.hrs.mapper.LoginMapper.register
3.上两步的问题都没有,但是还是不行,可能原因就是,没有构建进去,打开target看看对应的mapper.xml文件在不在(图片有问题,留个悬念,各位看官思考下是不是看出问题了)打完收工,问题解决,膜拜大佬。1.mapper.xml中的namespace和实际的mapper文件不一致(赏自己一个巴掌)2.mapper接口中的方法名和mapper.xml中的id标签不一致(赏自己一个巴掌)4.最后pom文件里添加resource。原创 2023-08-13 14:09:39 · 196 阅读 · 0 评论 -
Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could
推测是因为用了是新建的springboot maven项目是springboot3.0以上要jdk17以上等导致的,哪里有些配置不兼容了吧,让我看一看找一找,聪明的你们有没有发现问题出在哪里呢。给你1min的时间思考。相信已经有大佬知道问题原因了,不要说话,启动默认装叉模式。把mybatis的版本升级下,与springboot版本兼容就好啦!老朋友了这错误: 一日不见,如隔三秋,见面总要来一拳。嗯,,为什么驱动类是灰色的,先放着。下面就是见证奇迹的时候,叮!看看我的配置先,用的是。原创 2023-08-13 14:07:10 · 200 阅读 · 0 评论 -
java后端技术汇总 + 中间件 + 架构思想
java后端技术汇总 + 中间件 + 架构思想原创 2023-08-12 12:49:12 · 2316 阅读 · 0 评论 -
spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集
SpringAop 3.写一个登录的控制类,这里有asystemlogin跟bsystemlogin 用来区分注解的参数。1. 先写一个登陆记录注解(//记录:XXX时间,XXX姓名,XX系统,登录成功)2. 写一个切面对注解进行处理(业务逻辑处理,记录登陆的信息)原创 2023-08-12 12:41:44 · 678 阅读 · 0 评论 -
技术前台、技术中台、技术后台之间的关联与作用
在互联网时代,技术圈似乎从来不缺少热议话题,但有质量,有深度,且能解决实际问题的却少之又少。现在人人都在讨论「中台」,今天「产品中台」,明天「数据中台」,这个说能提高效率,那个说能排除万难,聊得不亦乐乎。对于企业来说,话题热不热并不重点,方案牛不牛逼也不重要,关键是能帮助用户找到效率、质量与成本的平衡点,或许才算是一个合格的「技术中台」。转载 2023-07-14 10:53:20 · 1072 阅读 · 0 评论 -
从0-1的java技术开发银行风险金融系统,可以作为毕业设计,或者java面试项目
成功放款,生成对应的还款计划(日,月,季度),包括还款周期(分期期数),还款方式(先息后本,等额还款)还款金额(本金+利息),还款操作(自动还是手动)根据贷款人信息,进行贷款规则(重点),信用度,贷款人偿还能力(查贷款人公积金、社保,银行流水)、是否之前有贷款过进行评估。计算公式为:本金×每元每期应还金额。这里的每元每期应还金额需事先根据贷款利率算出。每期偿还等额的本金加当期应付利息。计算公式为:本金÷总期数+剩余本金×每期利率。收集贷款人资料,包括贷款人姓名,电话号码,身份证,银行卡。原创 2023-03-26 20:17:40 · 883 阅读 · 1 评论 -
数据结构之-concurrentHashMap源码分析
扩容(transfer(Node[] tab, Node[] nextTab),首先就是分配复制任务给多线程,第一个线程进行新Node初始化,扩容为原来的2倍,线程扩容完成后就进行数据的复制迁移,这里有低位的ln跟高位的hn分别存储,最后进行汇总到新的Node中,将旧的位置就标记为fwd节点。泊松分布,长度为8已经是千万分之几的概率了,这是测试出来最合适的数值,正常情况下是达不到的,只是为了开发过程中的不当使用。小结:当删除,增加元素时,碰到扩容过程是要进行协助扩容的。原创 2023-03-08 14:13:21 · 232 阅读 · 0 评论 -
使用JDBC的批量插入百万数据要多少秒
rewriteBatchedStatements=true设置,将N条SQL语句的执行封装成单条语句的执行,可以考虑同时关闭事务的自动提交connection.setAutoCommit(false)来提高执行效率;来看执行效率结果(普通笔记本测试环境,插入100W条数据做测试)分20W/执行,批量执行5次,对比百万数据直接插入,分批执行内存占用一下就降低了。rewriteBatchedStatements=true时,同时关闭事务提交。提升效果还是很明显的,10W的数据量下差了几秒的速度。原创 2023-02-24 19:00:58 · 359 阅读 · 0 评论 -
Java面试过程中碰到的值得记录的知识点
出现精度损失的原因:输入的值为十进制,而在计算的过程中,是要把十进制的小数位值在有限位的情况下转变为二进制的小数,就会出现精度的损失。fullGC触发条件 除了使用锁,还有其它哪些方式能实现线程安全 泛型的使用 AOP在业务中,有没有自定义过注解 toString()方法的底层原理toString返回的内容:如果没有重写的情况下,返回的字符串内容的类型+@+内存地址值。重写的情况下,返回的内容就是重写后的内容Mybaits中如果在顺序动态参数的情况下使用$还是#,使用$的情况下,怎么解决sql注入问题原创 2023-02-22 16:47:49 · 196 阅读 · 0 评论 -
快速入门Springboot+AOP实现切面处理请求Demo
面向切面编程,将影响多个公共类的行为封装成一个单独的可重复使用的模块,简单的说就是将与业务无关但是为业务模块所公共使用的逻辑封装起来,减少重复代码的创建,更便于维护。Aop的使用场景:-权限校验-日志处理-事务等。。原创 2023-02-21 15:47:06 · 486 阅读 · 0 评论 -
通俗易懂的线程池底层原理,一文知所有
线程池通过使用CAS跟AutomicInteger来改变线程数量跟线程状态,核心参数用Volatile来修饰,同时使用Condition、ReentrantLock对创建线程的过程,线程池状态的改变,工作任务数量的改变(添加跟删除)等,来通过allowCoreThreadTimeOut || wc > corePoolSize来判断使用poll还是take方法或者任务,Worker同时也继承了AQS(不可重入,线程运行时就不会中断)1.合理的设置核心线程、最大线程数,充分利用资源,同时也要避免资源的浪费。原创 2023-02-06 18:15:59 · 835 阅读 · 2 评论 -
多角度剖析redis数据结构及底层实现原理、应用场景
整合各路大佬文章精华,多角度剖析redis数据结构及底层实现原理、应用场景,一文知redis数据结构,融合各路大佬精华。原创 2022-10-31 23:16:26 · 553 阅读 · 0 评论 -
JVM调优及各种问题处理
JVM相关知识,散发思维原创 2023-02-05 17:05:45 · 315 阅读 · 0 评论 -
数据结构-链表篇
数据结构之链表篇原创 2023-01-30 19:25:43 · 168 阅读 · 0 评论 -
数据结构--数组篇(想到啥写啥)
数组底层原理 综上所述:使用Iterator跟for循环是可以成功删除元素的,foreach循环则不行。checkForComodification()检验,该方法只针对了实现了Iterator的类,而Iterator跟foreach底层实现都是依赖这个接口。for循环则不依赖注意上面的Demo只是说删除元素时会不会报错,并不是说上面几种方式都能正确删除完全,使用for循环保证正取删除元素可以使用倒序的方式,或者使用Iterator方式(推荐)。原创 2023-01-30 12:28:32 · 192 阅读 · 0 评论