
Java
文章平均质量分 71
Java 是世界上最好的语言
薛之豪
随心写写,记录点滴
展开
-
同事开发中遇到 mybatis #{} 与 ${}的小问题
前言:同事开发遇到了一个问题,我好奇凑过去看了。问题:有个特别的需求,需要从 一条 SQL 中查出一个值 NameSQL1 例如: Select Name From Where age =18 ,而这个值是个表名取出这个 Name 传入到另一条 SQL 语句中,假设这个 Name = “table1”SQL2 :Select * From dbo.table1 Where age =18 ,按照这样的设想,在 mybatis 中,写的语句如下Select * From dbo.#{Name原创 2021-01-11 19:14:58 · 284 阅读 · 0 评论 -
Java 多线程之线程状态转换(十五)
假设有线程 Thread t1、NEW ==》 RUNNABLE当调用 t.start() 方法时,由 NEW --> RUNNABLE2、RUNNABLE 《==》 WAITINGt 线程用 synchronized(obj) 获取了对象锁后调用obj.wait() 方法时,t 线程从RUNNABLE --> WAITING调用 obj.notify() ,obj.notifyALL () , t.interrupt() 时竞争锁成功, t 线程从 WAITING .原创 2021-01-10 22:03:53 · 149 阅读 · 0 评论 -
Java多线程之 Park和Unpark(十四)
介绍Park 和 Unpark 均是 LockSupport 类中的方法//暂停当前线程LockSupport.park();//恢复某个线程LockSupport.unpark(暂停线程对象);先 park 再unpark Thread thread = new Thread(() -> { System.out.println("start....."); try { Thread.sleep(原创 2021-01-05 23:57:50 · 6929 阅读 · 0 评论 -
Java 封装请求接口,报错 406 Not Acceptable 或 <302,<html><head><title>Object moved</title></head><body> <h2>O
前言:在公司写一些请求封装的接口,按照以往的 Ctrl+C 和 Ctrl + V 是没什么问题的,这不,很不巧就翻车了,起初怀疑我 copy 漏,原来是这次的文档请求有些不一样。正文报错:<302,<html><head><title>Object moved</title></head><body><h2>Object moved to <a href="/WebSiteError.aspx"&g原创 2020-12-20 21:34:35 · 1211 阅读 · 0 评论 -
Java多线程之死锁
死锁是什么?定义: 指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。举个例子:两个小孩,小王持有玩具,小明持有电视遥控。小王想看电视,要拿遥控器,但对手里的玩具不肯放手。小明想玩玩具,但对手里的遥控器也不打算放手。看来双方都是全都要!于是大家都在做零和博弈,吃着碗里的看着锅里的。这就是典型的生活死锁想想。import lombok.extern.slf4j.Slf4j;import java.util.concur原创 2020-12-19 23:57:45 · 146 阅读 · 4 评论 -
Java多线程之 synchronized 的“锁“事(十二)
前言:synchronized 通过Monitor来实现线程同步,Monitor是依赖于底层的操作系统的Mutex Lock(互斥锁)来实现的线程同步。但 阻塞或唤醒一个Java线程需要操作系统切换CPU状态来完成,这种状态转换需要耗费处理器时间 。如果同步代码块中的内容过于简单,状态转换消耗的时间有可能比用户代码执行的时间还要长,有点杀鸡用牛刀的感觉。所以在 Java 6 之后, 为了减少获得锁和释放锁带来的性能消耗,引入了“偏向锁”和“轻量级锁”。PS:依赖于操作系统Mutex Lock所实原创 2020-12-19 23:56:46 · 134 阅读 · 2 评论 -
Java 多线程之 Monitor (十一)
前言在后续会深入分析 synchronized 的底层原理,但在说之前必须得讲解 Monitor 做位铺垫。正文Java 对象头以 32 位 Java 虚拟机(JVM)为例子普通对象 (64 位 或 8 个字节)|--------------------------------------------------------------|| Object Header (64 bits) ||--------原创 2020-12-18 23:44:25 · 219 阅读 · 3 评论 -
Java 多线程之变量线程安全分析(十)
正文成员变量和静态变量是否线程安全?若它们没被共享,则线程安全若它们被共享,分两种情况讨论若只有读操作,则线程安全若有读写操作,则这段代码是临界区,需要考虑线程安全局部变量是否线程安全?局部变量是线程安全的局部变量引用的对象则未必如果对象没有逃离方法的作用范围,它是线程安全的若对象逃离方法的作用范围(比如 return),需考虑线程安全的常见线程安全类StringIntegerStringBufferRandomVectorHashtablejava原创 2020-12-17 22:33:13 · 261 阅读 · 2 评论 -
Java 多线程之临界区与竞态条件(九)
正文Java 体现共享资源的问题两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果为 0 么?public class Test2 { static int j = 0; public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { for (int i = 0原创 2020-12-17 22:32:09 · 256 阅读 · 0 评论 -
Java 多线程之主线程与守护线程(七)
正文概念默认情况下,Java 进程得等待 所有线程都运行结束,才会结束。有一种特殊的线程叫守护线程,只要其它非守护线程运行结束了,即使守护线程的代码还没执行完,也会强制结束。应用垃圾回收器线程就是一种守护线程Tomcat 中的 Acceptor 和 Poller 线程都是守护线程,所以 Tomcat 接收到 shutdown 命令后,不会等待它们处理完当前请求线程的 5 种与 6 种状态五种状态 ——从操作系统层面初始状态,语言层创建了线程对象,未涉及操作系统可运行(就绪)状态原创 2020-12-17 22:27:12 · 357 阅读 · 0 评论 -
Java 多线程之常用方法(六)
前言Java 多线程中的方法有很多,我们就挑几个有代表性的来分析正文sleep(睡眠)调用 sleep 会让当前线程从 Running --》Timed Waiting 状态(阻塞)其他线程使用 interrupt 方法打断正在睡眠的线程, sleep 方法会抛出 InterruptedException PS: 好比一个在睡觉的人,被吵醒,有起床气!!!睡眠结束后的线程未必会立刻得到执行,因为这时的CPU 可能正在执行其他代码JDK 1.5 之后增加了 TimeUnit 的sleep原创 2020-12-17 22:23:26 · 191 阅读 · 0 评论 -
Java 多线程之 Monitor (十一)
前言在后续会深入分析 synchronized 的底层原理,但在说之前必须得讲解 Monitor 做位铺垫。正文Java 对象头以 32 位 Java 虚拟机(JVM)为例子普通对象 (64 位 或 8 个字节)|--------------------------------------------------------------|| Object Header (64 bits) ||--------原创 2020-12-17 22:11:52 · 192 阅读 · 0 评论 -
Java 多线程之线程运行原理(八)
概念栈与栈帧JVM 中由堆、栈、方法区(JDK 1.8 后改为元空间)组成,其中栈内存是给启动后的线程使用。每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存每个线程只能有一个活动栈帧,对应着当前正在执行的方法代码public class ThreadFrames { public static void main(String[] args) { test1(1); } private static void test1( i原创 2020-12-13 11:12:44 · 149 阅读 · 0 评论 -
Java 多线程之查看进程线程方法(五)
Windows任务管理器,查看或杀死进程我们可以看到 进程的ID (PID)以及名称cmd --》 tasklist 查看进程 taskkill 杀死进程例子taskkill /F /PID xxx/F 代表强制杀死xxx 代表进程 IDLinuxps -fe 查看所有进程ps -fT -p 查看某个进程(PID)的所有线程kill 杀死进程top 按大写 H 切换是否显示线程top -H -p 查看某个进程(PID)的所有进程Javajp原创 2020-12-13 11:06:32 · 382 阅读 · 0 评论 -
Java多线程之创建线程(四)
方法一,直接使用 Thread //创建线程,建议创建线程的时候取一个名字Thread t = new Thread("t1"){ @Override public void run() { //执行的方法 System.out.println("通过 new Thread() 方法创建线程"); }};//设置名称//t.setName("t1");//启动线程t.start();方法二,使用 Runnable 配合 Thread原创 2020-12-09 21:39:04 · 269 阅读 · 2 评论 -
Java 多线程之应用(三)
应用一异步调用同步:需要等待结果返回,才能继续运行异步:不需要等待结果返回,就能继续运行通俗易懂的说,周末在宿舍,到饭点了,我叫舍友一起去打饭,他说打完这局王者才能跟我一起去吃饭,我一直在那等他,这就叫同步我喊舍友一起去吃饭,舍友在打游戏,说知道了,我一个人去食堂打饭去了,这就叫异步特点多线程可以让方法执行变为异步。避免因为执行某个耗时的方法,而使得其他代码都暂停,浪费时间。上面的例子,我因为等待舍友打完游戏,才能一起去吃饭,如果我不等他,我可能早就打完饭回宿舍开吃了。实际应用视频原创 2020-12-09 21:35:19 · 153 阅读 · 0 评论 -
Java多线程之并行并发傻傻分不清楚(二)
背景单核时代单核 CPU 情况下,线程实际上是串行执行任务的。操作系统这个 BOSS,手底下有个狗腿子叫任务调度器,将 CPU 的时间片段分给不同线程使用。因为计算机的线程切换速度非常快,给人感觉就是同时运行的错觉。一般将这种 线程轮流使用 CPU 的做法称为并发。一句话概括:微观上串行,宏观上并行。多核时代当然,时代是在进步的,现在的计算机基本上是多核 CPU 了,什么双核四线程,八核十二线程的,归根结底都是为了提高 CPU 的利用率。多核 CPU 下,每个核都可以调度运行线程,这时的线程可原创 2020-12-05 22:14:00 · 290 阅读 · 0 评论 -
Java 多线程之进程与线程(一)
前言虽然各种框架技术日益更新,但终究逃不过基础,年轻人,耗子尾汁,别再犯这样的聪明,小聪明啊。正文进程程序由指令和数据组成,而指令要运行、数据要读写,就必须将指令加载到 CPU 里,数据加载到内存。在指令运行过程中还要用到其他资源(磁盘、网络)。 进程就是用来加载指令、管理内存、管理IO的当一个程序被运行,从磁盘加载到内存,就代表开启一个进程。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。原创 2020-12-05 20:57:42 · 105 阅读 · 0 评论 -
《设计模式》之为什么需要项目开发需要三层?
前言最近重新拾起《设计模式》温故一下,结合公司项目经济记录一下,当然这只是一篇学习笔记正文我想起刚实习那会,终于接触到了比较真实又复杂的项目,项目里一会 Controller、一会 Service 、一会 Repository 的,我迷惑不解。好家伙,原来这叫 MVC 三层开发模式(较真来讲 MVC 跟 Controller、Service 、Repository 是两码事!)Controller (控制层 / 表示层),它是负责接口暴露的,它会调用 Service ,然后将处理结果返回到前端原创 2020-11-25 21:30:07 · 222 阅读 · 0 评论 -
【Java 时间戳】时间戳转格式变1970问题,已解决
前言好久不见,打工人们!原因最近遇到一个新需求,需要获得时间戳(单位是秒),然后转成一定得时间格式,yyyyMMddHHmmss ,本以为不就是 Ctr + C 和 Ctr +V 就能搞定,结果碰壁了。明明输入时当前时间(0202年),结果一转换就变成了 1970XXXX,这个时间差异太离谱了,没见过。源代码: public static String getFormatTimestamp() { // 获取当前时间戳,Java8 新特性 long time原创 2020-10-24 00:30:58 · 11131 阅读 · 5 评论 -
【深圳X金技术公司】Java笔试题
前言今年 8 月份,一个同学内推的面试,好吧,笔试题我做得一塌糊涂,然后被面试官一顿血虐。正文一 选择题1)关于 C++ / Java 类中 static 成员和对象成员的说法正确的是()A static 成员变量在对象构造时生成B static 成员函数在对象成员函数中无法使用C 虚成员函数不可能时 static 成员函数D static 成员函数不能访问 static 成员变量2)袋中有红球,黄球,白球各一个,每次任意取一个又放回,如此连续抽取 3 次,则下列事件中概率是 8/9原创 2020-09-21 23:54:01 · 2349 阅读 · 5 评论 -
开发中常用的那些 Spring 注解
文章目录前言一、Controller 层注解二、Service 层三、其他前言当前互联网公司 Java 开发大概率绕不开 Spring 全家桶,也意味着绕不注解,我记得有一次面试官问我注解,一开口就三连炮,是什么,有什么用,你会怎么实现。我特么蒙蔽了,平时不就是 Ctrl C + Ctrl V 么?痛定思痛后,整理了平时开发用的注解,以为进一步分享总结其原理。一、Controller 层注解@RestController : @RestController Spring4.0之后新增的,原创 2020-09-15 21:35:15 · 258 阅读 · 0 评论 -
【解决BUG】javax.validation.UnexpectedTypeException: HV000030: No validator could be found for
错误原因Java实体类中属性是Integer类型,用了NotBlank判断不能为空,而这个注解是判断字符串是否为空3、解决办法 去掉@NotBlank注解、使用@NotNull原创 2020-09-04 16:51:39 · 3060 阅读 · 1 评论 -
【2020塔塔集团(汇丰)】Java 电话面试
前言这是塔塔集团那边的电话面试,因为人不在广州,跟面试官协调的,而且算是一个外包项目,估计是个老项目。正文1、JSP 两种跳转方式?使用href超链接标记 客户端跳转使用javascript 客户端跳转提交表单 客户端跳转使用response对象 客户端跳转使用forward总做标记 服务器跳转使用requestDispatcher类 服务器跳转2、SQL 注入与预防sql注入的原理是将sq原创 2020-08-31 22:35:28 · 1392 阅读 · 1 评论 -
【设计模式】单例模式双层校验(DCL)与 volatile 的关系
这是一道面试题,引申的思考DCL单例(Double Check Lock)到底需不需要 volatile其实就是问:private static volatile Singleton singleton = null; 中的 volatile 有没有必要加?代码public class Singleton { // 使用volatile保证了多线程访问时singleton变量的可见性, // 避免了初始化时其他变量属性还没赋值完时,被另外线程调用 private原创 2020-08-08 23:38:34 · 256 阅读 · 0 评论 -
【JK160】Java开发工程师面试题
前言去深圳某互联网公司的面试,要求是2年以上的开发。正文Java 基础1、聊一聊 HashMap(1.7 和 1.8)答:hashMap 的底层结构在 jdk1.7 中由数组+链表实现,在 jdk1.8 中由数组+链表+红黑树实现,以数组+链表的结构为例。默认初始容量时 16 ,负载因子时 0.75。线程安全:非线程安全解决哈希冲突:1.7 采用头插法的拉链表式,如果成百上千个节点 hash 碰撞,会退化成一个长链表,会花费 O(N) 时间查找,而且容易形成死循环链接1.8 采用尾插法+原创 2020-08-07 17:00:59 · 381 阅读 · 0 评论 -
Java 部分笔试题,菜是原罪!
前言今天又去面试了,做了一些笔试题,淦!正文1、分析以下代码,写出结果和并说明原因public class App { public static void main( String[] args ) { Long a = new Long(3); Long b = 3L; int c = 3; System.out.println(a == b); // false System.out.println(b原创 2020-08-01 11:00:29 · 796 阅读 · 0 评论 -
解决 Failed to execute goal on project
问题描述在 IDEA install 模块时报错了,看了控制台信息 ,估计是依赖问题[ERROR] Failed to execute goal on project xxx.yyy.share: Could not resolve dependencies for project com.dfl:xxx3.yyy.zzz:jar:1.0-SNAPSHOT: Failure to find com.xxx:xxx-target:pom:1.0-SNAPSHOT in https://xxxx/sn原创 2020-06-08 16:26:43 · 31128 阅读 · 2 评论 -
JAVA 程序展示时间与数据表保存的时间相差了 13 个小时!
微信公众号:[一起学习大数据呀] 关注可学习更多奇怪的知识!前言五一放假回来,功能我提前完成了,这会在学习算法,微信的声音响起,测试说,有个小问题,讲真的,最怕测试突然想起你。测试甩了三张截图给我,说你的保存时间不对啊,奇怪了,放假前还好好的,怎么一回来就出问题了。不知道你们有木有发现不对劲,数据表的时间比 Java 代码展示的时间少了。分析我开始分析了,放假前,是没问题的,后...原创 2020-05-06 21:33:07 · 1570 阅读 · 1 评论 -
Java 筛选日期不能大于 31 天
微信公众号:[一起学习大数据呀] 关注可学习更多奇怪的知识!前言产品给了我个需求,XX 时间:筛选日期,最多 31 天, 我跟前端说,这个你控制就好了,前端反驳,测试不允许这种情况出现,怕被别人搞。好吧,测试大佬说了算,卑微的开发实习生低头答应,嘤嘤嘤…分析其实思路也不难,就是把前端传来的时间参数(一个起始时间,一个结束时间),若相差大于 31 天,那么就不符合要求了。代码Sim...原创 2020-04-14 09:53:39 · 1151 阅读 · 0 评论