![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 70
悦然lily
生命不息,奋斗不止
展开
-
抽象类和接口的区别
一、抽象类: 在面向对象领域,抽象类主要用来进行类型隐藏。那什么是类型隐藏呢?我们可以构造出一个固定的一组行为的抽象描述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。好比,动物是一个抽象类,人、猴子、老虎就是具体实现的派生类,我们就可以用动物类型来隐藏人、猴子和老虎的类型。( 参考doSome方法)转载 2016-04-25 16:41:46 · 241 阅读 · 0 评论 -
同步类CountDownLatch
CountDownLatch1、类介绍一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。 一转载 2016-10-03 21:24:30 · 220 阅读 · 0 评论 -
CountDownLatch理解:与join的区别
首先,我们来看一个应用场景1:假设一条流水线上有三个工作者:worker0,worker1,worker2。有一个任务的完成需要他们三者协作完成,worker2可以开始这个任务的前提是worker0和worker1完成了他们的工作,而worker0和worker1是可以并行他们各自的工作的。如果我们要编码模拟上面的场景的话,我们大概很容易就会想到可以用join来做。当在当前线程中调转载 2016-10-03 21:53:31 · 323 阅读 · 0 评论 -
java浅克隆与深克隆
如果我们有一个对象a,我们想得到它的一个克隆,那么我们该怎么做呢?最直观、最笨的方法是我们先new一个a的同类对象b,然后挨个拷贝a的属性给b中的相应属性。那么,这里马上就得引出两个概念:浅克隆与深克隆。如果用直白的、非严格定义的语言来解释这两个概念,那么可以这么说:所谓浅克隆是指复制一个对象的实例,但是这个对象中包含的其它的对象还是共用的。所谓深克隆是指复制一个对象的实例转载 2016-10-03 22:14:40 · 193 阅读 · 0 评论 -
java中的强引用、软引用、弱引用、虚引用
为了使应用程序更灵活地控制对象的生命周期,从jdk1.2开始,java把对象的引用分为四种:强引用、软引用、弱引用、虚引用。一、强引用强引用是最常见的、最被熟知的引用。例如:String s = new String("abc")。那么s就是一个强引用。如果一个对象具有强引用,那么垃圾回收器就绝不会回收它。二、软引用如果一个对象只具有软引用,当内存空间足够时,垃圾回收器转载 2016-10-05 14:37:34 · 212 阅读 · 0 评论 -
对象序列化
Java对象序列化 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。 只能将支持 java.io.Serializable 接口的对象写入流中。每个 serializable 对象的类都被编码,编码内容包转载 2016-10-05 15:16:54 · 164 阅读 · 0 评论 -
Spring IOC理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC 、DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解。一、分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spr转载 2016-10-05 15:57:35 · 159 阅读 · 0 评论 -
Spring IOC
转自:http://blog.csdn.net/m13666368773/article/details/7802126一. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从转载 2016-10-05 16:09:53 · 186 阅读 · 0 评论 -
Spring AOP
一、什么是 AOPAOP(Aspect-OrientedProgramming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为(日志、安全、事务)的时候,OOP则显得无能为力。也就是说,OOP允许你定义从转载 2016-10-08 13:33:07 · 196 阅读 · 0 评论 -
svn版本控制使用讲解
本文将直接讲解图形界面TortoiseSVN和在MyEclipse安装SVN插件的方法。一、下载安装TortoiseSVN 网址:https://tortoisesvn.net/downloads.html(有32位和64位), Tortoise是SVN的一个图形化界面客户端工具,Tortoise安装(选择安装命令行端可不再需要安装SVN服务器端,因自带有,安装原创 2017-02-21 14:14:19 · 312 阅读 · 0 评论 -
jdk安装配置
Java jdk下载网址: http://www.oracle.com/technetwork/java/javase/downloads/index.html会自动安装jdk和jre.安装完成后如图配置环境变量:Computer--Properties--Advanced system settings--Environment Variables在System vari原创 2018-01-12 16:16:01 · 249 阅读 · 0 评论 -
Maven下载安装
1. 安装maven登录maven官网: https://maven.apache.org/download.cgi如图,下载第一个或第二个,在本地解压安装详情: https://maven.apache.org/install.htmlWindows安装:我的电脑--属性--高级系统设置--环境变量--在用户变量里找到PATH,增加;C:\softwore\apache-原创 2018-01-12 17:31:32 · 249 阅读 · 0 评论 -
STS IDE中配置Tomcat服务器
在STS IDE中配置Tomcat服务器步骤:打开STS IDE,Window-Preference-Server--Runtime Environment---Add选择自己要安装的Tomcat版本,如我选的是Apache Tomcat v8.0Next, 可以选择自己本地下载好的(网址 http://tomcat.apache.org/download-80.cgi),也可以在线下原创 2018-01-12 22:07:59 · 7039 阅读 · 0 评论 -
类加载机制
1、预先加载:JRE运行的开始会将Java运行所需要的基本类采用预先加载的方法全部加载到内存,如JRE的rt.jar里面所有的.class文件2、类的生命周期:类从被加载到虚拟机内存开始,到卸载出内存为止,整个生命周期包括七个阶段加载——>验证——>准备——>解析——>初始化——>使用——>卸载(其中类加载包括前面五个过程,即加载、验证、准备、解析、初始化。而验证、准备、解转载 2016-10-03 14:40:46 · 173 阅读 · 0 评论 -
类加载机制
类加载机制JVM把class文件加载的内存,并对数据进行校验、转换解析和初始化,最终形成JVM可以直接使用的Java类型的过程就是加载机制。类从被加载到虚拟机内存中开始,到卸载出内存为止,它的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Usi转载 2016-10-03 14:06:49 · 186 阅读 · 0 评论 -
关于“抽象类是否可继承实体类”的辨析。
一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题。题目如下:问: 抽象类是否可继承实体类 (concrete class)答: 抽象类是可以继承实体类,但前提是实体类必须有明确的构造函数 -------------------答案很明确,可以继承。其实从Object就是个实体类,java的API文档里,每个抽象类转载 2016-04-25 17:04:48 · 336 阅读 · 0 评论 -
集合栈
题目:请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填满时,新建一个栈。该数据结构应支持与普通栈相同的push和pop操作。 给定一个操作序列int[][2] ope(C++为vector>),每个操作的第一个数代表操作类型,若为1,则为push操作,后一个数为应push的数字;若为2,则为pop操作,后一个数无意义。请返回一个int[][]原创 2016-05-10 16:47:39 · 626 阅读 · 0 评论 -
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,是在return前还是后
一般答案:会执行,在方法返回调用前执行。准确的说是在return中间执行。下面举个例子:public class Test { public static void main(String[] args) { System.out.println("结果: " + new Test().test()); } static int转载 2016-04-26 21:59:59 · 11590 阅读 · 1 评论 -
年终将-京东,微策略笔试题
小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角原创 2016-05-13 14:25:52 · 801 阅读 · 0 评论 -
面向对象的3个基本要素和5个基本设计原则
面向对象的3个基本要素:封装、继承、多态 面向对象的5个面向对象设计原则:SRP:Single-Resposibility Principle,单一职责原则;OCP:Open-Closed principle,开放封闭原则;LSP:Liskov-Substituion Principle,Liskov替换原则;DIP:Dependecy-Inversio转载 2016-05-05 21:02:52 · 632 阅读 · 0 评论 -
面向对象设计原则之四:依赖倒置原则
依赖倒置原则 所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体。简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。 面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变化时,上层也要跟着变化,这就会导致模块的复用性降低而且大大提高了开发的成本。面向对象的开发转载 2016-05-05 21:19:52 · 303 阅读 · 0 评论 -
hashcode和equals方法比较
Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法,今天就来介绍一些这两个方法的作用。jdk规范中说道,如果要实现自己的equals()方法,则也需要实现相应的hashCode()方法。1.equals()方法在object类中定义如下:public boolean equals(O转载 2016-08-01 14:35:26 · 321 阅读 · 1 评论 -
sleep和wait的区别
1.sleep()和wait()方法的区别 sleep()方法是属于Thread类中的,而wait()方法,则是属于Object类中的。sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线转载 2016-08-08 13:26:32 · 337 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
1.图的深度优先遍历(类似于树的先序遍历)假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选转载 2016-08-09 20:01:07 · 702 阅读 · 0 评论 -
海量数据处理问题
给定a、b两个文件,各存放50亿个url,每个url各占用64字节,内存限制是4G,如何找出a、b文件共同的url?答案: 可以估计每个文件的大小为5G*64=300G,远大于4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 遍历文件a,对每个url求取hash(url)%1000,然后根据所得值将url分别存储到1000个小文件(设为 a0,a1,...a999转载 2016-08-09 20:05:18 · 240 阅读 · 0 评论 -
现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?
使用join()方法public class TestJoin{ public static void main(String[] args) { Thread t1 = new Thread(new T1(), "线程1"); Thread t2 = new Thread(new T2(), "线程2"); Thread t3转载 2016-09-27 19:43:05 · 912 阅读 · 0 评论 -
线程交替打印
/** * 建立三个线程,A线程打印10次A,B线程打印10次B,C线程打印10次C,要求线程同时运行,交替打印10次ABC。 * 这个问题用Object的wait(),notify()就可以很方便的解决。 * * 主要的思想就是,为了控制执行的顺序,必须要先持有prev锁,也就前一个线程要释放自身对象锁,再去申请自身对象锁, * 两者兼备时打印,之后首先调用self.not转载 2016-09-27 20:42:54 · 366 阅读 · 0 评论