- 博客(84)
- 收藏
- 关注
原创 手写SpringMVC豪华版
SpringMVC作为最常用的web框架,如果有一天用自己写的框架去实现自己的项目,是不是也挺有意思的。之前的博客中已经完成了,SpirngIOC容器的模拟实现,所以就在原来的基础上实现自己的SpringMVC框架。话不多说上源码:1、实现自定义注解:package servlet.annotation;import java.lang.annotation.*;@Targe...
2019-09-22 00:36:42
324
原创 spring整合struts2
1、创建web项目webtest2、pom.xml中添加spring和Struts2依赖包<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instanc...
2019-06-29 16:23:43
307
原创 log4j实现日志记录
1、创建web项目webtest2、配置文件web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" ...
2019-06-29 11:17:20
329
原创 Spring IOC深度解析
1、创建maven项目spring20,模拟实现Spring的IOC容器2、各个配置文件:web.xml:用于servlet的启动配置<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xml...
2019-06-24 00:46:46
239
原创 spring IOC 简易实现
1、自己实现一个ioc容器,在idea中创建maven-web项目spring102、配置文件文件如下:pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/X...
2019-06-23 13:07:21
188
原创 用maven profile 实现环境配置切换
1、创建一个maven 项目webtest,pom文件如下。resources文件加下创建三个配置文件的目录,prod(生产环境),test(测试环境),dev(开发环境)。分别在这三个目录下添加配置文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4...
2019-06-22 13:22:51
400
原创 自己完成一个jdk动态代理
1、自定义类加载器package proxy.custom;import java.io.*;public class GPClassLoader extends ClassLoader { private File classPathFile; public GPClassLoader() { String classPath = G...
2019-04-10 10:10:05
146
原创 java cglib动态代理
cglib 动态代理1、引入字节码操作框架相关jar包,创建被代理类:package proxy.cglib;public class Tom { public void findLove(){ System.out.println("寻找灵魂伴侣"); };}2、创建代理类:package proxy.cglib;import ...
2019-04-09 12:14:57
158
原创 java JDK动态代理
JDK动态代理1、创建接口package proxy;public interface Person { public void findLove(); public void findJob();}2、创建实现类package proxy.jdk;import proxy.Person;public class XiaoMing i...
2019-04-09 12:01:48
171
原创 mysql搜索引擎innodb和myisam的区别
上次面试中被问到mysql的搜索引擎innoDB和myisam的区别,一脸懵逼。面试后赶紧查了一下,其主要区别如下:1、存储文件:Innodb存储的文件有.frm格式的表定义文件和.ibd格式的数据文件;而Myisam存储的文件包含.frm格式的表定义文件、.myd的数据文件、.myi的索引文件。innodb的索引机构是聚簇索引,主键索引的子节点是每一行数据;myisam的索引结构是非聚...
2019-03-13 20:22:50
756
原创 springboot启动类注解
话说上次面试遭遇非常之尴尬,洗刷耻辱就从springboot启动类注解开始吧。 面试时还被问到一个问题,@RestController是不是springboot的注解?我只能说不知道。下来查了一下,@RestController不是springboot提供的,在springmvc4.0中就已经存在,主要为微服务提供返回格式,当时该类中的所有方法返回json格式数据,等价于@Contr...
2019-03-12 22:34:09
3088
原创 最尴尬的一次面试
昨天面试时,面试官问到我一个问题,你最精通的java技术是什么?脑海里回想出工作以来遇到的很多技术:spring,springmvc,spring-boot,mybatis,redis,solr,oracle,sqlserver,mysql.....,好像没有什么是我特别精通的,甚至java基础也不敢说精通。最后我说了个spring-mvc,然后简单说了下spring-mvc的请求流程,面试官...
2019-03-12 06:16:40
216
原创 程序员之迷茫
坐标洛阳,程序员一枚,曾游荡于郑州上海之间。年近不惑,回到洛阳,突然感觉自己一事成,家未成,业未立,驾照也没考,失败。洛阳的工资还完房贷也就勉强维持生存,父母年龄越来越大,加上尚未成家,程序员这个职业在外飘泼更难找到自己的伴侣,迷茫。不知道多少人跟我一样,家乡容纳不了肉体,他乡容纳不了灵魂。 前路曲折,也唯有奋力向上,在这挣扎求生的世界中杀出一条血路来。...
2019-03-08 21:57:40
190
转载 jdk版本切换
下载安装在E:\jdk1.3.1\jdk,改变环境变量中的JAVA_HOME,在cmd下输入java -version后还是显示为1.8版本,说明没有切换成功 查了查,发现个博客是解决这个问题的,地址。 可是我的问题依然没有解决,版本还是没有切换 然后仔细看了看系统变量path,内容是:C:\ProgramData\Oracle\Java\javapath;C:\Progra...
2019-02-25 00:30:21
266
原创 volatile
package com.example.demo.morethread;import java.util.concurrent.atomic.AtomicInteger;public class AtomicTest { private static AtomicInteger atomicInteger=new AtomicInteger(0); ...
2019-02-22 21:05:19
152
原创 原子操作
当在多线程情况下,同时更新一个共享变量,由于我们前面讲过的原子性问题,可能得不到预期的结果。如果要达 到期望的结果,可以通过synchronized来加锁解决,因为synchronized会保证多线程对共享变量的访问进行排 队。在Java5以后,提供了原子操作类,这些原子操作类提供了一种简单、高效以及线程安全的更新操作。而由于变量 的类型很多,所以Atomic一共提供了12个类分别对应四种类型...
2019-02-20 23:24:12
181
原创 Semaphore
semaphore也就是我们常说的信号灯,semaphore可以控制同时访问的线程个数,通过acquire获取一个许可,如 果没有就等待,通过release释放一个许可。有点类似限流的作用。叫信号灯的原因也和他的用处有关,比如某商 场就5个停车位,每个停车位只能停一辆车,如果这个时候来了10辆车,必须要等前面有空的车位才能进入。 package com.example.demo.moret...
2019-02-20 22:49:13
150
原创 线程池
Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。线程池 就像数据库连接池的作用类似,只是线程池是用来重复管理线程避免创建大量线程增加开销。所以合理的使用线程 池可以\1. 降低创建线程和销毁线程的性能开销\2. 合理的设置线程池大小可以避免因为线程数超出硬件资源瓶颈带来的问题,类似起到了限流的作用;线程是稀 缺资源,如果无线创建,会造成系统...
2019-02-19 23:23:46
171
原创 CountDownLatch
countdownlatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从 命名可以解读到countdown是倒数的意思,类似于我们倒计时的概念。countdownlatch提供了两个方法,一个是countDown,一个是await, countdownlatch初始化的时候需要传入一 个整数,在这个整数倒数到0之前,调用了await方法的程序都必须要等待...
2019-02-19 22:23:34
159
原创 读写锁
我们以前理解的锁,基本都是排他锁,也就是这些锁在同一时刻只允许一个线程进行访问,而读写所在同一时刻可 以允许多个线程访问,但是在写线程访问时,所有的读线程和其他写线程都会被阻塞。读写锁维护了一对锁,一个 读锁、一个写锁; 一般情况下,读写锁的性能都会比排它锁好,因为大多数场景读是多于写的。在读多于写的情况 下,读写锁能够提供比排它锁更好的并发性和吞吐量.package com.example...
2019-02-18 23:04:30
131
原创 重入锁
同步锁锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源, 在Lock接口出现之前,Java应用程序只能依靠synchronized关键字来实现同步锁的功能,在java5以后,增加了JUC 的并发包且提供了Lock接口用来实现锁的功能,它提供了与synchroinzed关键字类似的同步功能,只是它比 synchronized更灵活,能够显示的获取和释放锁。...
2019-02-17 12:39:48
207
原创 wait和notify
wait和notify是用来让线程进入等待状态以及使得线程唤醒的两个操作 package com.example.demo.morethread;public class ThreadWait extends Thread{ private Object lock; public ThreadWait(Object lock) { this.lock ...
2019-02-17 12:01:01
162
原创 自旋锁、偏向锁、轻量级锁、重量级锁
synchronized的锁升级和获取过程 了解了对象头以及monitor以后,接下来去分析synchronized的锁的实现,就会非常简单了。前面讲过 synchronized的锁是进行过优化的,引入了偏向锁、轻量级锁;锁的级别从低到高逐步升级, 无锁->偏向锁->轻量 级锁->重量级锁.自旋锁(CAS) 自旋锁就是让不满足条件的线程等待一段时间,而不是立即挂起。看持有锁的...
2019-02-16 20:32:44
239
原创 Java内存模型
Java 内存模型定义了线程和内存的交互方式,在 JMM 抽象模型中,分为主内 存、工作内存。主内存是所有线程共享的,工作内存是每个线程独有的。线程 对变量的所有操作(读取、赋值)都必须在工作内存中进行,不能直接读写主 内存中的变量。并且不同的线程之间无法访问对方工作内存中的变量,线程间 的变量值的传递都需要通过主内存来完成,他们三者的交互关系如下 JMM怎么解决原子性、可见性、有序性...
2019-02-16 20:16:21
144
原创 线程的停止
线程的停止 线程的启动过程大家都非常熟悉,但是如何终止一个线程,我相信绝大部分人 在面试的时候被问到这个问题时,也会不知所措,不知道怎么回答。 线程的终止,并不是简单的调用 stop 命令去。虽然 api 仍然可以调用, 但是和其他的线程控制方法如 suspend、resume 一样都是过期了的不建议使 用,就拿 stop 来说,stop 方法在结束一个线程时并不会保证线...
2019-02-16 19:03:00
146
原创 线程的状态
线程作为操作系统调度的最小单元,并且能够让多线程同时执行,极大的提高 了程序的性能,在多核环境下的优势更加明显。Java 线程既然能够创建,那么也势必会被销毁,所以线程是存在生命周期的, 那么我们接下来从线程的生命周期开始去了解线程。 线程一共有 6 种状态(NEW、RUNNABLE、BLOCKED、WAITING、 TIME_WAITING、TERMINATED)NEW:初始状态,线程被...
2019-02-16 18:06:33
150
原创 带有返回值的多线程
通过ExecuteService,Callable,Future实现带有返回值的多线程:1、通过实现Callable接口创建线程类package com.example.demo.morethread;import java.util.concurrent.*;/** *使用带有返回值的线程 */public class CallableDemo implements Ca...
2019-02-16 16:19:40
1974
原创 sqlserver查询时间最新记录
方法一、根据时间倒序排序,添加行号select ksno,xuliehao,print_time,id,tjxx,create_time,print_status from(SELECT ksno,xuliehao,print_time,id,tjxx,create_time,print_status,row_number() over ( order by cre...
2019-02-15 16:22:24
5744
原创 数据库去除重复数据
背景:去除数据库中字段重复的数据表t_bmk 包含三个字段 id,ksno,fenzu_code;现在去除t_bmk中ksno和fenzu_code两个字段重复的数据,步骤如下:方法一:1、根据重复字段用group by函数进行分组,查出所有重复的数据,用max函数获取每组重复数据最大的idselect fenzu_code,zhiwen_status,count(fenzu_cod...
2019-02-15 14:35:36
3723
原创 springboot整合druid
1、配置文件application.yml #端口配置server: port: 8080 session-timeout: 600spring: datasource: type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/test?c...
2019-02-14 23:39:35
175
原创 springboot集成mybatis
1、用idea创建springboot项目,pom文件如下: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi...
2019-02-14 20:43:53
236
原创 checkbox全选、清除、反选
<div id="choose"> <label style="font-size: 17px;font-weight: 100"><input type="checkbox" name="tjx" style="zoom: 130%" value="tj_erbihou_erbihou" /&
2019-02-14 17:19:42
420
原创 springboot启用线程池
1、在application.properties中配置线程池server.port=8088#线程池配置task.queue.corePoolSize=10task.queue.maxPoolSize=30task.queue.queueCapacity=8task.queue.keepAlive=60baseurl=http://localhost:8080#login...
2019-01-26 00:29:00
3580
2
原创 springboot通过注解实现多线程
1、springboot启动类中添加 @EnableAsync package com.zr.gktjweb;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springf...
2019-01-25 00:53:20
7906
原创 springboot通过controller层实现页面切换
背景:通过springboot完成一个web项目时,想像springmvc一样通过controller层实现页面切换。实现方式如下://return "dashboard";//这是由模板引擎解析,然后拼串 //return "forward:/dashboard.html";//这是转发 return "redirect:/main.html";//这是重定向最终浏览器返...
2019-01-22 16:21:37
1355
2
原创 springboot 集成 generator逆向工程
1、创建springboot项目,pom文件如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schema...
2019-01-22 00:50:54
153
原创 springboot通过aop实现日志打印
1、通过springboot创建web项目gktjweb ,pom文件如下: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...
2019-01-14 16:26:58
2349
1
转载 springboot重定向和转发
如果是转发的话,添加上“forward: /”+转发的路径就好了,如果是重定向的话,在return 的字符串中,添加上“redirect : /”+重定向的路径 就可以了。如果不加,就是通过模板引擎解析,然后拼串视图解析器获得数据后,返回相应的视图。 //return "dashboard";//这是由模板引擎解析,然后拼串 //return "forward:/da...
2019-01-12 00:39:18
1934
原创 springboot设置默认访问首页
SpringBoot中的HTML静态资源通常是放在resource下的static文件夹先,放在这个文件夹下的HTML文件,可以直接通过端口号后直接加html名称就可以直接访问。 但是需要我们在输入端口号或者系统名称时就可以访问首页。解决办法如下: package com.example.demo.config;import org.springframework.cont...
2019-01-11 23:22:55
548
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人