
Java
唐唐
这个作者很懒,什么都没留下…
展开
-
Maven搭建SSM框架(eclipse)
1.新建Maven工程,需要注意的是:在Archetype上,选择Artifact Id为maven-archetype-webapp的那项。 2.在Build Path里添加Tomcat的JAR包支持。成功之后的工程项目结构如图所示: 3.此时可以开始添加Spring,SpringMVC,Mybatis,MySQL,Druid,Log4j等支持。pom.xml依赖...原创 2018-08-30 00:51:40 · 218 阅读 · 0 评论 -
Tomcat8源码在Eclipse中调试(一)-源码编译,及在Eclipse中启动
最近想要走读下Tomcat8的源码,因此做一下记录;1.下载Tomcat8,下载路径http://tomcat.apache.org/download-80.cgi 下载tomcat8.0.532.将下载好的压缩包,解压 以下是我的路径 E:\apache-tomcat-8.0.53-src3.下载ant 对源码进行编译 【编译的目的是编译出tomcat源码运行时需要...原创 2018-08-24 00:09:50 · 1641 阅读 · 0 评论 -
synchronized+Integer模拟火车票预售,出现的问题总结
实现火车票预售,必然会出现线程安全问题,开始用原子类AtomicInteger,后面觉得Lock也可以实现,用Lock 也是实现了下,在用Synchronized实现的时候,出现了下面的问题;1.首先大家抢票,那我定义一个Integer类型的count 用来存放火车票数(从这里开始就已经为后面的代码埋下了雷啊!)2.创建抢票线程类,在这个类的run方法中对count加锁,进行票减少操作...原创 2018-08-30 18:59:15 · 394 阅读 · 0 评论 -
Java中的enum
在做项目的过程中,经常会遇到订单的不同状态,比如定义为: //未支付 public static final int ORDER_DEPOT_UNPAY = 0; //已支付 public static final int ORDER_DEPOT_PAYED = 1; //支付超时 public static final int ORDER_DEPOT_TIMOUT = 2;...原创 2018-08-17 00:38:40 · 318 阅读 · 0 评论 -
构造方法参数过多该如何解决?-建造者模式
在编码的过程中,不可避免的遇到一个类有很多的成员变量,为了代码的健壮性,大家挖空心思地写各种构造方法,构造方法写到郁闷,貌似还没有全部包含,这个时候推荐大家用建造者模式!以下为具体的实现代码:public class Goods { private final String goodsId; private final String goodsName; private final S...原创 2018-08-16 20:04:42 · 745 阅读 · 1 评论 -
自己动手写SpringMVC(七)
最后一个任务:任务五:实现doGet() doPost()方法;代码中调用了hand()方法,基本原理和以前的差不多,因此不做详细说明!@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this....原创 2018-08-08 22:01:01 · 215 阅读 · 0 评论 -
线程并发工具类-CountDownLatch与CyclicBarrier区别
首先抛个概念:CountDownLatch:一个线程等待其他线程完成工作以后再执行,相当于加强版的join,初始化的时候,给定一个数值,通过调用countDown()方法,对这个数值进行减一操作,通过调用await()方法,让当前线程等待,直到数值减到0的时候,所有await的线程开始运行。例子:视频会议,开视频会议的人有10个人,是否开始视频会议,决定条件是:人员是否到期,换句话就是没有...原创 2018-08-07 14:41:30 · 225 阅读 · 0 评论 -
ConcurrentHashMap实现原理及源码分析(转载)
ConcurrentHashMap实现原理及源码分析 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参考我的另一篇文章HashMap实现原理及源码分析),ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进...转载 2018-08-10 13:52:30 · 212 阅读 · 0 评论 -
自己动手写SpringMVC(一)
看了很久的源码,为了能更深刻的理解,自己动手定义一个属于自己的简单SpringMVC;此示例没有考虑任何持久层的内容。客户端发来请求 http://ip:port/项目名称/类路径/方法路径根据ip和port可以唯一确定是哪个服务器项目名称可以唯一确定是哪个项目类路径可以唯一确定是哪个处理类方法路径可以唯一确定是哪个方法如果客户端浏览器访问:http://192..16...原创 2018-07-28 12:47:32 · 320 阅读 · 0 评论 -
自己动手写SpringMVC(六)
已经分析过DispatcherServlet主要的任务,分为五个任务,任务一:把项目中所有的bean扫描,进行维护,任务二:根据全类名创建bean实例,并进行维护;本篇文章来实现任务三,任务四;任务三:根据bean进行依赖注入; //把service注入到控制层 public void doIoc(){ if(beans.entrySet().size()<=0){ S...原创 2018-08-03 16:37:03 · 216 阅读 · 0 评论 -
JAVA面向接口的编程思想与具体实现
开发中定义的那么多接口,到底有啥用? 面向对象设计里有一点大家已基本形成共识,就是面向接口编程,我想大多数人对这个是没有什么觉得需要怀疑的。问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了事了?反过来说,你有时候有没有觉得接口是多余的事? 又或者,你仅仅是觉得现在类似spring这样的框架已习惯用接口这种方式而心存当然。 设计模式解...转载 2018-07-26 18:37:36 · 2639 阅读 · 4 评论 -
自己动手写SpringMVC(五)
已经分析过DispatcherServlet主要的任务,分为五个任务,任务1:把项目中所有的bean扫描,进行维护,我们已经完成,现在第二个任务:根据全类名创建bean实例,并进行维护;其实写到这里就要恶补一下反射的相关知识了:1.如何通过类的信息,获得这个类的类类型Class<?> c1 = Class.forName("com.tx.Foo");2.知道一个类的...原创 2018-07-29 22:41:35 · 305 阅读 · 0 评论 -
自己动手写SpringMVC(四)
本文将主要实现DispatcherServlet!之前已经分析过DispatcherServlet主要的任务,分为五个任务,我们从任务一开始开始实现!任务1:把项目中所有的bean扫描,进行维护;实现代码如下:private void scanPackage(String basePackage){ URL url = this.getClass().getClassLoad...原创 2018-07-29 00:42:32 · 191 阅读 · 0 评论 -
自己动手写SpringMVC(三)
此篇我们开始写DispacherServlet之前先好一个包含query方法的Controller,以及Controller里调用的Service接口,以及此接口的实现类:首先代码结构图如下:1.Controller 中实现代码如下:@Controller@RequestMapping("/student")public class StudentController {...原创 2018-07-29 00:21:05 · 255 阅读 · 0 评论 -
自己动手写SpringMVC(二)
估计看了上篇博文,大家都已经开始查看DispatcherServlet的源码,今天我们先不看源码,直接根据DispatcherServlet实现的功能; 现在开始分析DispatcherServlet需要实现什么功能? SpringMVC里最好用的地方,应该是注解吧,因此我们需要完成如下任务: 任务一:把项目中所有的bean扫描,进行维护;任务二:根据全类名创建bean实...原创 2018-07-28 15:00:48 · 196 阅读 · 0 评论 -
Eclipse中.properties文件中文显示编码问题
1.设置eclipse工作空间的编码 window->preference->general->workspace->text file encoding (左下角)->other->utf-82.设置之前项目的编码 项目名称单击右键->properties->resource->test file encoding->oth...原创 2018-07-20 10:14:04 · 10815 阅读 · 3 评论 -
框架的低侵入如何理解?
低侵入,高侵入的主要区别是:想要去除此框架或者模块时,代码的改动大小低侵入:去除此框架后,只需要修改一些配置信息,即可,反之,即是高侵入举个例子:低侵入:如果一个web项目用了低侵入的A框架,有一天,需求方要求技术更新,放弃使用A框架,要使用B框架,程序猿们只需要把与A框架相关的配置信息注释或者删除,把B框架加入。高侵入:如果一个web项目用了高侵入的C框架,有一天,需求方要求技术...原创 2018-07-24 11:54:50 · 2941 阅读 · 1 评论 -
HashMap存储原理以及与hashcode、equals方法的关系
一、HashMap 源码:public class HashMap<K, V> extends AbstractMap<K, V> implements Cloneable, Serializable { private static final int MINIMUM_CAPACITY = 4;... transient HashMapEntry<...转载 2018-07-10 20:10:44 · 2268 阅读 · 0 评论