- 博客(35)
- 收藏
- 关注
原创 每天一道面试题-谈谈对面向对象思想的理解
这个问题,通常会让很多人有点不知所措,感觉我一直在编码,但是说到思想很难去阐述。下面,我说说自己的想法,首先,谈谈“面向过程”vs“面向对象”我觉得这两者是思考角度的差异,面向过程更多是以“执行者”的角度来思考问题,而面向对象更多是以“组织者”的角度来思考问题,举个例子,比如我要产生一个0-10之间的随机数,如果以“面向过程”的思维,那我更多是关注如何去设计一个算法,然后保证比较均衡产...
2018-12-14 17:56:41 1851 3
原创 004-SpringMVC-如何接收各种参数(普通参数,对象,JSON, URL)
在交互的过程中,其中一个关键的节点就是获取到客户端发送过来的请求参数,本篇文章,我们来罗列下SpringMVC对于各种数据的获取方式:说明:以下重点在讲解如何获取参数上,所以返回的数据不是重点1,普通方式,请求参数名跟Controller的方法参数一致1.1 创建Controller1.2 发送请求做测试(由于方法没有限制请求方式,所以get和post均可)2,当请求参数过多时,以对象的方式传递2...
2018-06-05 22:39:53 12734
原创 003-SpringMVC快速上手
前面讲了一些理论上的知识,主要是给有经验的小伙伴做下总结,如果没有SpringMVC的开发经验,可以来阅读下这一篇,帮助你快速入门前提说明:我们的工程都是以Maven的方式来构建,所以需要大家对Maven有一定的认识。1,创建Maven工程,类型为war2,引入依赖<dependency><groupId>org.springframework</groupId>...
2018-06-05 22:34:41 299 1
原创 002-漫谈SpringMVC架构
1,SpringMVC是一种基于Servlet的技术,他提供了核心控制器DispatcherServlet,整体为松散的结构,方便应对各种灵活要求。整体的架构图如下:2,SpringMVC的整体架构围绕核心控制器DispatcherServlet来进行工作,下面我们来看看具体执行的流程图,都涉及到哪些组件首先,DispatcherServlet接收到一个客户端请求,然后通过HandlerMappi...
2018-06-05 22:33:43 225
原创 001-探究MVC设计的发展
首先,MVC设计是一种理念,并不局限于Java,其他的语言,比如PHP,.NET也同样可以适用。不过在开发的占比中,java依然是主要地位,所以本文将以JavaWeb来进行描述MVC的发展历程。JavaWeb的第一代开发模式,简称Model1以JSP+JavaBean的模式组合,这个模式会存在什么问题,我们以图说话JavaWeb的第二代开发模式,简称Model2,也称为MVC模式相比Model1,...
2018-06-05 22:31:53 504
原创 每天一道面试题-final,finally,finalize有什么区别?
这道题目的出镜率很高,来,我们直接进入主题:finalfinal修饰类,表示该类不可以被继承final修饰变量,表示该变量不可以被修改,只允许赋值一次final修饰方法,表示该方法不可以被重写finallyfinally是java保证代码一定要被执行的一种机制。比如try-finally或try-catch-finally,用来关闭JDBC连接资源,用来解锁等等finalizefinalize是O...
2018-06-05 22:29:51 2897
原创 每天一道面试题-转发和重定向的区别
转发和重定向,这是项目开发中的两种跳转方式,其差异也经常被拿来作为面试题。首先,转发是一次请求,就好比你到医院办理相关手续,然后这个窗口可能不能直接搞定,但是他经过内部协调处理,最终还是通过这个窗口给你反馈最终的结果,所以对于你来说,只需要跟一个窗口交互即可。而重定向,是多次请求,还是上面的例子,这个窗口搞不定你的需求,然后他会告诉你去找另一个窗口(服务器内部)或者去另一家医院办理(跳出当前服务器...
2018-06-05 22:04:49 609
原创 每天一道面试题-再谈Cookie跟Session的区别
cookie跟session有何区别,下面我们来谈谈1,存储的位置不同cookie:存放在客户端session:存放在服务端2,存储的数据类型不同两者都是key-value的结构,但针对value的类型是有差异的cookie:value只能是字符串类型session:value是Object类型3,存储的数据大小限制不同cookie:按照不同的浏览器来说,有些细小的差异,但整体来说就是4K的大小s...
2018-06-05 22:03:58 791
原创 每天一道面试题-Servlet属于线程安全的吗?
Servlet不是线程安全的。当Tomcat接收到Client的HTTP请求时,Tomcat从线程池中取出一个线程,之后找到该请求对应的Servlet对象并进行初始化,之后调用service()方法。要注意的是每一个Servlet对象再Tomcat容器中只有一个实例对象,即是单例模式。如果多个HTTP请求请求的是同一个Servlet,那么着两个HTTP请求对应的线程将并发调用Servlet的ser...
2018-06-05 22:02:52 854
原创 每天一道面试题-ConcurrentHashMap vs HashMap vs LinkedHashMap vs HashTable
HashMap:查询和插入速度极快,但是线程不安全,在多线程情况下在扩容的情况下可能会形成闭环链路,耗光cpu资源。LinkedHashMap:基本和HashMap实现类似,多了一个链表来维护元素插入的顺序,因此维护的效率会比HashMap略低。但是因为有链表的存在,遍历效率会高于HashMap。HashTable:线程安全,但性能较差,已经不推荐使用ConcurrentHashMap:线程安全,...
2018-05-20 12:22:13 809
原创 每天一道面试题-运行时异常和非运行时异常-你分清楚了吗?
面试中,经常会遇到这样的情况,问:谈谈运行时异常和非运行时异常?答:运行时异常是指程序运行时发生的异常问:那么非运行时异常又是什么时候发生?答:。。。。。。问:请罗列几个常见的运行时异常?答:空指针异常,IOException,SQLException,数组越界异常。。。。以上这样的场景非常常见,其实这是一个非常基础的问题,但发现大家常常搞混。其实这个问题,我个人认为是取的这个名字误导了大家,运行...
2018-05-20 12:20:40 1424 1
原创 每天一道面试题-探究JVM中-类的加载机制
类的加载机制是怎么样的?下面我们分几个部分来讲解1,这些概念你知道是什么意思吗?相信你应该听过不少这样的词语,类加载机制,双亲委托机制,BootstrapClassLoader、ExtClassLoader、AppClassLoader如果你不清楚,这些都是什么意思?没关系,看完下面的内容,你就清楚了2,什么是类的加载机制?所谓类的加载机制是指JVM将java类加载到内存的过程。我们知道,JVM使...
2018-05-20 12:11:10 907
原创 每天一道面试题-从源码探究HashSet的工作原理
HashSet,给我们最直观的感受就是两点,不可重复和无序,底层采用了hash存储结构。其底层是采用了HashMap,今天我们通过深入源码的方式来了解其背后的原理。我们关注的点有几个1,所谓的hash表是一个怎么样的结构?hash表底层结构是一个数组,且数组的元素是一个链表结构。给大家画个图2,是如何保证唯一的?存放进去的细节如何?首先,在hashSet的底层源代码中,我们发现,它采用的HashM...
2018-05-20 12:09:39 847
原创 每天一道面试题-ArrayList和Vector的区别
首先,推荐大家使用ArrayList,了解这个差别,更多是为了应对面试。两者的最大差异就是线程安全ArrayList:线程不安全,但性能高Vector:线程安全,但性能较低我们如何得到一个类是线程安全或不安全的结论的?从源码的角度来说,你大可以打开ArrayList和Vector的源码一对比,即可发现ArrayList的部分源码:public boolean add(E e) {ensureCap...
2018-05-20 12:06:47 382
原创 每天一道面试题-谈谈ArrayList和LinkedList的区别
1,首先,底层的数据结构不同ArrayList底层的数据结构是数组LinkedList底层的数据结构是双向链表2,其次,做增删改查的差异2.1 查询(定位)数组是一段连续的内存空间,所以定位快而链表需要通过上一个节点找到下一个节点,依次类推,所以定位相比数组要慢2.2 增加如果添加到末尾,则差异不大,ArrayList可能会面临扩容的情况,因为底层是数组而LinkedList只需要生成新对象,然后...
2018-05-20 12:04:14 1598
原创 每天一道面试题:谈谈==和equals的区别
比较基本数据类型时,只能采用==,比较的是数值当比较引用类型时,==比较的是引用的地址,而equals其实也是,我们查看到equals是Object定义的方法,而其默认的实现也是比较地址。而我们经常用到的String类型,因为重写了equals方法,其内部比较的是内容,所以String s1 = new String("永远相信美好的事情即将发生");String s2 = new String(...
2018-05-20 12:01:59 2234
原创 每天一道面试题-String,StringBuffer,StringBuilder的区别
这道题比较简单,整体来说,分两部分来比较1,String vs StringBufferString:不可变StringBuffer:可变所以,如果在一个循环操作,不断对字符串进行拼接操作,那么使用String会不断创建新的对象,这个效率会比较低,在这种情况下,建议采用StringBuffer2,StringBuffer vs StringBuilderStringBuffer:线程安全Strin...
2018-05-20 11:57:50 198
原创 每天一道面试题-程序中怎么实现变量值的交换?
实现两个变量的值交换,有几种实现方式呢?可以很多种,我今天给大家列举三种方式一:采用临时变量的方式假设要交换的两个变量,int a = 1;int b = 2;int temp = a;a = b;b = temp;方式二:采用数学运算的方式a = a+b;b = a-b;a = a-b;不过这种方式,有可能存在越界的情况,不知道大家发现没有?方式三:采用位运算的方式a = a^b;b = a^b...
2018-05-20 11:56:53 296
原创 每天一道面试题-&和&&的区别
今天这道题非常简单,哈哈- 第一个是作为逻辑运算符使用,被当成逻辑运算符时有一个非短路的特性,即当第一个操作数为false,那么第二个操作数仍然执行。 - 第二个是作为位运算符使用。&&只有一个用法: - 只能作为逻辑运算符使用,和&的区别在于&&有一个短路的特点,即当第一个操作数为false时(因为这个时候已经可以确定表达式的最终结果已经是false),那...
2018-05-18 17:14:06 703
原创 02-MySQL优化系列之-你真的掌握了正确的建表方式吗
万丈高楼平地起,如何正确创建表非常重要,而如何正确建表,在于如何正确选择合适的数据类型,所以今天我们来谈谈这个话题说明下:因为发现把图表粘贴过来,显示的时候,格式有点乱,所以我采用截图的方式将图表贴到文章中1,数据类型选择的原则原则一:数据类型从小出发通常情况下,应该选择可以正确存储数据的最小数据类型。最小的数据类型意味占用更小的磁盘,内存和CPU缓存。但是提醒一点,要正确估算存储的数据的取值范围...
2018-05-18 17:09:34 265
原创 01-MySQL优化系列之-掌握MySQL底层结构
1,MySQL的逻辑架构2,MySQL的存储引擎介绍MySQL的存储引擎有很多,我们今天,主要来介绍两款存储引擎的对比特点MyISAMInnoDB是否支持事务不支持支持锁机制表锁行锁是否支持外键不支持支持(是MySQL唯一支持外键的存储引擎)并发性高并发低并发结论:推荐大家采用InnoDB存储引擎,MyISAM在MySQL8.0版本将被废弃3,如何设置和查看存储引擎在创建表时,可以为表指定存储引擎...
2018-05-18 09:15:32 235
原创 13-SpringAOP最强大的通知-环绕通知
为什么说环绕通知是SpringAOP最强大的通知,因为他可以将之前的几个通知融合到一起,所以功能相比其他通知,会更加强大和灵活。下面,我们通过代码来理解下:1,为了跟之前的切面类区分,我们创建一个新的切面类2,编写测试程序,来验证结果这就是强大的环绕增强,哈哈,我说的增强就是上述的通知,个人感觉读增强更合适...
2018-05-17 16:35:20 7374
原创 12-SpringAOP编程实现-实践得真知-下篇(XML的方式)
在之前,我们主要讲了以注解的方式来实现AOP,本篇我们来谈谈XML的实现方式,在项目开发中,我们基本是两种方式混合使用,所以这个也是需要掌握的方式之一。1,创建接口和实现类(跟之前没差别,就是少了个@Component注解)2,创建切面类(Aspect)3,关门,上配置文件以上的配置文件,会发现重复在写一样的正则表达式,我们可以再坐下简化编写测试程序,验证结果:到此,大家可以结合之前的几篇文章,顺...
2018-05-17 16:32:11 133
原创 11-SpringAOP-关于切点和织入说明(JDK和CGLIB再也不迷糊)
1,切点的说明,我们在上篇文章中使用正则表达式定义了切点,在此我对这段正则表达式做一个说明,帮助没基础的同学方便理解。execution(* com.spring.aop.UserServiceImpl.showUser(..))execution:表示执行这个方法的时候会触发*:表示任意返回类型的方法com.spring.aop.UserServiceImpl:表示全类名showUser:表示被...
2018-05-17 16:31:16 988
原创 分享技术,享受更美好的人生
回想自己一路走来,也有好些年头了,从最初的懵懵懂懂,到现在的焕然大悟,哈哈,其实,感觉技术就是一个浩瀚的宇宙,无边无际,完全可以自由的遨游,无拘无束,会很多美好的技术可以去探索,研究,并感受其中的美好。技术的世界是单纯的,同时也可以给我带来更好的物质条件,从而享受到现实生活的美好。我的计划是通过发布一系列的文章来跟大家分享技术,内容力争简洁到位,让大家花最少的时间掌握最关键的技术。以系列化的方式来...
2018-05-17 09:14:35 546
原创 10-Spring-AOP编程实现-实践得真知-上篇
首先,要明确两个问题:1,AOP编程可不是Spring独有的,Spring只是支持AOP编程的框架之一,这一点非常重要,切勿搞反了关系。2,AOP分两类,一类可以对方法的参数进行拦截,一类是对方法进行拦截,SpringAOP属于后者,所以Spring的AOP是属于方法级的那么,Spring是如何实现AOP的?基本上来说,我们常用的有两种方式:1,基于@AspectJ注解的方式2,基于XML配置的方...
2018-05-16 17:13:59 307 1
原创 09-秒杀AOP常用术语,一篇就够
AOP的常用术语,常常是初学者感觉比较乏味的,下面我们结合上一篇文章的图来进行对照说明。建议大家可以先看下后面的图,再来对比下前面的说明,会更清晰1,切面(Aspect)比如上文讨论的数据库事务,这个数据库事务代码贯穿了我们的整个代码,我们就可以这个叫做切面。SpringAOP将切面定义的内容织入到我们的代码中,从而实现前后的控制逻辑。比如我们常写的拦截器Interceptor,这就是一个切面类2...
2018-05-16 17:04:36 431
原创 08-你真的看懂了SpringAOP的运行机制吗?
之前我们谈了Spring-IOC,这是非常巧妙的思想,今天我们继续来探讨Spring的另一个重要特性Spring-AOPAOP(Aspect Oriented Programming):面向切面编程什么是面向切面编程,我的理解是,在没有使用面向切面编程之前,我们是经常把业务的核心代码和非核心业务代码混搭在一起。我们以数据库的操作为例来说明:1,获取连接对象2,执行SQL(核心业务代码)3.1,如果...
2018-05-16 17:03:28 338
原创 07-Spring-Profile,灵活定制启动环境
需求:比如我们需要在开发和测试两个环境进行切换,那么这个时候,我们又不想频繁修改我们的配置文件,这个问题怎么办?方案:Spring为我们提供了Profile机制如果是结合@Bean注解,则可以使用@Profile("dev")注解,然后在启动测试类加入@ActiveProfiles("dev")来启动该机制不过,通常来说,通过tomcat服务器启动的情况会多一些,所以我们更多采用XML的方式,然后...
2018-05-16 17:02:27 153
原创 06-Spring-Bean的作用域-浅谈struts2安全漏洞
Spring-Bean的作用域有4种1,单例(singleton),默认设置,只会产生一个实例2,原型(prototype),每次都会产生一个新的实例3,会话(session),在web应用中,在整个会话过程中只创建一个实例4,请求(request),在web应用中,在一次请求中创建一个实例开发中,Service,dao层对象采用默认作用域,而比如Struts2的Action则推荐采用protot...
2018-05-16 17:01:20 172
原创 05-Spring Bean的装配方式
我们如何将自己开发的Bean装配到Spring-IOC容器中,基本来说有3种方式:1,通过XML进行配置<bean id="" class=""></bea>2,通过注解进行配置,可以有效减少XML的配置,推荐使用首先,在需要被Spring管理的Bean上添加@Component注解,其次,通过@ComponentScan注解指定扫描的包或者XML的方式都可以<con...
2018-05-16 17:00:09 165
原创 04-Spring Bean注入方式
实现IOC容器主要有两种方式:1,依赖查找2,依赖注入,Spring采用的是依赖注入的方式依赖注入又分为3种方式:2.1 构造器注入2.2 setter注入2.3 接口注入构造器注入和setter注入背后都是采用反射的技术来实现。接口注入,通常是指资源并非来自系统自身,而是来自系统外。比如我们可以在tomcat下配置数据源,然后在程序里面通过JNDI的方式去获取该数据源,这种方式就称为接口注入说明...
2018-05-16 16:59:09 115
原创 03-Spring-IOC容器的设计
Spring-IOC容器的设计主要基于BeanFactory和ApplicationContext两个接口。BeanFactory的源码:它的子接口及关键实现类:我们常用的接口是ApplicationContext接口,而ClasspathXmlApplicationContext这个类时最常用的子类。spring容器的关键要点:1,我们可以通过以下代码来初始化spring容器:Applicati...
2018-05-16 16:58:06 202
原创 02-Spring-IOC概述
今天,我们开始来谈Spring的核心IOC。IOC(Inversion of Control),控制反转举个例子,生活的例子,我想喝杯咖啡来醒醒神,那么这个时候,我有两种选择,一种是通过自己买来咖啡豆,然后自己制作;另一种选择就是直接到星巴克,我们跟店员说我们的要求,然后店员根据我们的要求,一杯香气浓浓的咖啡就这样呈现到了我们面前。在程序的世界里,如何对应?通过自己制作咖啡------------...
2018-05-16 16:57:01 157
原创 01-Spring的历史
在Java开发的世界里,Spring框架是最重要的开发框架,没有之一,所以掌握Spring非常重要,今天,我们从Spring的历史开始谈起。Spring的第一个版本从2004年开始,至今已有十几年的历史。作者是来自澳大利亚的工程师RodJohnson,这可是一位音乐专家,获得了音乐博士学位。Spring认为一切的Java类都是资源,而这些资源都是Bean,Spring提供了IOC容器就是来管理这些...
2018-05-16 16:55:56 392
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人