Java
杨天睿
这个作者很懒,什么都没留下…
展开
-
JDBC连接数据库通用操作
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。通常使用JDBC获取数据库连接的步骤如下(以MySQL为例):1.使用db.conf配置文件保存数据库配置信息注意配置文件的写法,不能加“”注意配置文件的路径,当期路径为加载类的同级路径JDBC_DRIVER=com.mysql.jdbc.DriverDB_URL=jdbc:mysql://1原创 2016-05-10 21:57:28 · 536 阅读 · 0 评论 -
Java 反射技术及其应用
反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。下面介绍下反射在Java项目中的使用Class类的使用概念理解在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对原创 2017-01-07 20:05:23 · 384 阅读 · 0 评论 -
Java 职责链模式
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。适用场景:有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;在不明确指定接收者的情况下,向多个对象中的一个提交一个请求;处理一个请求的对象集合应被动态指定。通用类图职责链模式说明 避免请求发送者与接收者耦合在一起,让多个对象都有原创 2016-12-20 01:01:34 · 444 阅读 · 0 评论 -
Java 线程的基本状态和操作
线程的几种状态在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态, 但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。第三是运行状态。原创 2017-01-01 21:22:32 · 892 阅读 · 0 评论 -
Java 桥接模式
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。桥接模式: 将抽象与实现分离,使他们能够独立的进行变化.我们通过下面的实例来演示桥接模式(Bridge Pattern)的原创 2016-11-28 14:23:26 · 358 阅读 · 0 评论 -
Java 状态模式
状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的(stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的。当一个这样的对象与外部事件产生互动时,其内部状态就会改变,从而使得系统的行为也随之发生变化。在下面的两种情况下均可使用State模式:一个对原创 2016-11-25 22:07:26 · 459 阅读 · 0 评论 -
Servlet HttpRequest和HttpResponse
/** * Created by yangtianrui on 16-10-7. */// 使用WebServlet 描述一个Servlet// name 描述WebServlet的名字// urlPatterns 定义访问的Url, 或者使用属性value进行定义(定义访问的Url是必选属性)@WebServlet(name = "MyServlet", urlPatterns = "原创 2016-10-17 21:43:32 · 366 阅读 · 0 评论 -
面向对象的六大原则
面向对象的六大原则 参考 http://www.tuicool.com/articles/mqmYr2 http://blog.csdn.net/banketree/article/details/24985607在Java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。它们的耦合度依次增强。对象之间的关系依赖:对于两原创 2016-10-26 13:22:12 · 357 阅读 · 0 评论 -
Java 多线程--interrupt()中断
Thread.interrupt()方法不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态。原创 2016-11-06 23:23:19 · 350 阅读 · 0 评论 -
Java 基于JDK中的InvocationHandler实现动态代理
动态代理是代理模式的一种,而代理模式又是一种非常有用的模式之一.下面介绍下通过InvocatonHandler实现动态代理InvocationHandler接口InvocationHandler 是代理实例的调用处理程序 实现的接口。 每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。 关键方法Object原创 2017-01-01 15:18:05 · 639 阅读 · 0 评论 -
Java并发中的Copy-On-Write容器
Copy-On-Write是并发编程的一种优化策略, 其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWri原创 2017-01-23 21:56:31 · 353 阅读 · 0 评论 -
[Java] volatile的使用场景
volatile的使用场景volatile用处volatile是java中较轻量的同步原语,用volatile声明的变量保证了该变量的可见性, 使用volatile声明的变量被其他线程更改时,该变量会立即被写入内存,同时 CPU会锁住总线,将缓存同步指令传递到其他处理器,其他处理器会从主内存中获取该变量的最新值更新到自己的缓存中。如下面的代码,如果这个counter变量没有声明成volat...原创 2018-10-03 23:27:51 · 4954 阅读 · 1 评论 -
Gradle Plugin实现检测Android项目运行时依赖
背景在Android开发过程中,我们会引入很多的第三方库,这些第三方库又会引入别的库,就可能出现版本不一致的问题。 Gradle在处理这种依赖冲突的策略是以版本最高(或指定)的版本打进APK包中。 这些问题在编译时无法发现,所以可能在运行时出现ClassNotFound,MethodNotFound之类的异常。例如:一个APK项目中,引入了ImageLoader和Album两个第三...原创 2018-07-10 22:37:41 · 854 阅读 · 0 评论 -
Mediator Pattern-中介者模式
中介者模式(行为型模式): 用一个中介者对象封装一系列的对象交互, 中介者使个对象不需要显示进行相互作用, 从而降低各类之间的耦合,可以独立的改变他们的交互中介者模式的组成抽象中介者:定义好同事类对象到中介者对象的接口,用于各个同事类之间的通信。一般包括一个或几个抽象的事件方法,并由子类去实现。中介者实现类:从抽象中介者继承而来,实现抽象中介者中定义的事件方法。从一个同事类接收消息,然后通过消原创 2017-10-08 22:39:50 · 276 阅读 · 0 评论 -
RxJava 简单订阅-发布Demo
职责介绍Observable RxJava中存在最广泛的事件源,可以使用just()或者’from()’创建,创建出Observable对象以后,使用就可以使用subscribe(),添加订阅对象了.Subject RxJava中的事件源和观察者的结合体,可以使用onNext()进行监听和发射对象,使用subscribe()添加订阅对象.初始化subject和Observable原创 2017-06-20 11:59:06 · 718 阅读 · 0 评论 -
Java位运算符总结
Java中的位操作符&(与)操作两个操作数中位都为1,结果才为1,否则结果为0public class data13{ public static void main(String[] args) { int a=129; int b=128; System.out.println("a 和b 与的结果是:"+(a&b));原创 2017-05-07 18:40:03 · 468 阅读 · 0 评论 -
Java 线程通信内存模型---主内存与工作内存
多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。硬件的效率与一致性 由于计算机的存储设备与处理器的运算原创 2017-03-12 15:26:45 · 4554 阅读 · 0 评论 -
Java 备忘录模式
备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式。 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。备忘录模式的结构备忘录模式的结原创 2017-03-18 15:46:24 · 355 阅读 · 0 评论 -
Java ReentranLock同步锁和Condition条件的使用
java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。这就为 Lock 的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加了类似锁投票、定时锁等候和可中断锁原创 2017-01-25 00:40:54 · 4771 阅读 · 1 评论 -
JSP 指令
JSP的指令useBean创建一个class属性指定的Bean对象,然后将它绑定在由id属性给出的变量上id 命名引用该Bean的变量。如果能够找到id和scope相同的Bean实例,jsp:useBean动作将使用已有的Bean实例而不是创建新的实例。 class 指定Bean的完整包名。 scope属性:指定Bean在哪种上下文内可用,可以取下面的四个值之一:page,request,s原创 2016-10-21 01:07:46 · 231 阅读 · 0 评论 -
UML入门
正如前面曾提到过的,UML的本意是要成为一种标准的统一语言,使得IT专业人员能够进行计算机应用程序的建模。UML的主要创始人是Jim Rumbaugh、Ivar Jacobson和Grady Booch,他们最初都有自己的建模方法(OMT、OOSE和Booch),彼此之间存在着竞争。最终,他们联合起来创造了一种开放的标准。(听起来是不是很熟悉?这个现象类似J2EE、SOAP和Linux的诞生。)U转载 2016-07-20 23:25:45 · 334 阅读 · 0 评论 -
Android Service的Binder通信机制
Service 的启动方式使用startService()启动,此时无法实现与启动者的通信,当启动对象结束时,Service仍然会在后台运行,使用stopService()可以停止Service的运行.使用bindService()将启动Service的对象进行绑定,使用unBindService()停止绑定,并且结束运行。现在介绍此方式。Binder对象 Binder对象相当于Servi原创 2016-05-17 19:39:43 · 416 阅读 · 0 评论 -
gson框架的使用
GSON GSON 是Google的一个json解析框架,和传统的json解析相比,有着明显的优势。 关于基本的JSON解析,你可以看下面这篇文章 Android JSON的解析API引入 本文使用的gson-2.3.1.jar基本数据类型和json字符串的转换通过toJson()将基本数据类型转换成json字符串public class Main { publ原创 2016-05-27 16:04:03 · 718 阅读 · 0 评论 -
Java正则表达式
正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。Java正则表达式和Perl的是最为相似的。java.util.regex包主要包括以下三个类:Pattern类:pattern对象是一个正则表达式的编译表示。Pattern类没有公共构造方法。要创建一个Patter转载 2016-05-16 17:18:11 · 290 阅读 · 0 评论 -
算法之穷竭搜索
这两天一直在刷PAT的程序设计题,在基础题中出现最多的就是HASH和穷竭 搜索了 。今天先来整理下穷竭搜索吧。穷竭搜索是将所有的可能性罗列出来,在其中找到答案的方法,我们也称为暴力法或者蛮力法,有时候对算法的时间和空间要求不高时,可以使用这个办法将所有的结果枚举出来,在结果集中寻找到我们想要的答案。一般我们通过DFS或者BFS进行实现,也可以直接使用迭代枚举出结果,直接原创 2016-05-04 23:23:05 · 761 阅读 · 0 评论 -
Java 序列化机制(二) -- 控制序列化的兼容性
serialVersionUID表示序列化版本简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastExcep原创 2016-05-14 22:38:30 · 1532 阅读 · 0 评论 -
okhttp框架的使用
okHttp框架 OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket, 通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势jar包依赖需要添加两个jar包okhttp和对应版本的okio本文使用okhttp3.3 okio1.6GET 方式建立连接Request对象用于建立连接// 首先得有一个OkHttpClient对象OkHttp原创 2016-05-27 11:44:52 · 1578 阅读 · 0 评论 -
java序列化机制(一)
序列化的目的Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。一般用于将对象保存在磁盘中或者跨进程通信(网络通信)。序列化APIjava.io.ObjectOutputStream和ObjectInputStream用于对象I/O。要被序列化的对象必须实现Serializable或者Externali原创 2016-05-11 23:22:04 · 511 阅读 · 0 评论 -
Lintcode二分搜索
Problem StatementFor a given sorted array (ascending order) and a target number, find the first index of this number in O(log n) time complexity.If the target number does not exist in the ar原创 2016-05-11 15:36:11 · 374 阅读 · 0 评论 -
IntentService的使用
使用Service需注意 Service 是在主线程中执行的,所以不能再Service中直接执行网络加载等耗时操作,应该开启子线程进行加载。使用IntentService IntentService会自动开起一个工作线程,在此工作线程中执行耗时操作,不会引发ANR异常. IntentService必须重写onHandleIntent(),并在此方法中执行耗时操作. Intent原创 2016-05-18 15:43:10 · 333 阅读 · 0 评论 -
Android使用TabLayout实现选项卡
使用TabLayout实现一个选项卡效果,之前一直自定义ViewGroup实现,今天之间用的Google框架,给我的感觉就是方便!先上效果图:内容区域使用的ViewPager,导航条使用的TabLayoutTabLayout在android.support.design包下,使用AS的同学记得先导入下布局使用的线性布局:挺简单的,不多说了。<andr原创 2016-05-08 20:08:48 · 3645 阅读 · 0 评论 -
Java设计模式 -- 策略模式
3.策略模式 定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。使用策略模式的好处策略模式的好处在于你可以动态的改变对象的行为。适用情况许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。需要使用一个算法的不同变体。 例如,你可能会定义一些反映不同的空原创 2016-07-05 16:23:17 · 365 阅读 · 1 评论 -
Java 静态代理模式
代理模式 为其他对象提供一种代理以控制对这个对象的访问。 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口, 代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系, 一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服原创 2016-07-25 22:37:48 · 468 阅读 · 0 评论 -
AppWidget的使用(一)
Android AppWidget桌面组件的使用App Widget是一种可以被放在其他应用中(如Launcher)并接收周期性更新的应用视图。 这些视图在UI上就表现为Widget,并且你可以同App Widget Provider一起发布。1.注册组件<receiver android:name="AppWidget"> <!-- 唯一需要显示声明的广播 --> <原创 2016-07-12 13:40:48 · 401 阅读 · 0 评论 -
Java设计模式 -- 观察者模式
观察者模式 在Android开发中用的还是比较多的,RXJava和Agera这种响应式编程框架的底层就是观察者模式。这个例子使用彩民和彩票公众号之间的关系,模拟实现了观察者模式。下面看下类图 首先有个Obserable即被观察者这里使用接口实现package observer;/** * 所有主题必须实现这个被观察者接口 * */public interface Observable原创 2016-06-28 17:46:48 · 311 阅读 · 0 评论 -
Java 内存管理
在面试中被问到了Java内存管理和GC,我对这个的理解还比较表面,现在来整理下这方面的知识。Java 内存管理 Java 使用JVM进行内存管理,JVM将内存分为五大区,下面分别进行介绍:1. 程序计数器程序计数器可以看成是当前字节码的行号指示器。JVM的字节码解释器就是改变程序计数器的值,来选择下一条要执行的指令。(跟X86CPU的CS:IP寄存器很像)程序计数器是单一线程独享的,保证进原创 2016-06-06 13:10:50 · 366 阅读 · 0 评论 -
java 泛型深入
java 泛型深入 本文将由浅入深介绍java泛型机制,作者理解有限,有错误的地方欢迎指正。java泛型基础JDK1.5以后开始支持泛型,在引入泛型之后,原始的复杂类型可以划分为多个类型; 泛型与C++的模板机制类似,目的是实现更为抽象的解耦。更方便的创建通用的数据类型。定义泛型在类中定义泛型 // 此处定义了两个泛型,T和S,T为任意的数据类型,S约束此泛型必须继承自T public原创 2016-06-08 23:39:47 · 340 阅读 · 0 评论 -
RSA 加密及算法实现
RSA 加密概述 RSA使用公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。RSA广泛原创 2016-05-20 00:29:33 · 3828 阅读 · 0 评论 -
PAT 乙级 1007. 素数对猜想 (20)
算法题原创 2016-05-09 20:06:48 · 915 阅读 · 0 评论 -
okHttp源码分析
整体设计OkHttp设计较为复杂,但是层次还算清晰,我把主要的类关系画了个图,大概是这样。OkHttp的类较多,这里只描述下重要的类关系,可以看出OkHttp的主要功能都集中在Interceptor中,通过Interceptor完成构建请求,建立Socket连接,建立SSLSocket连接,证书校验等步骤。我们看下Interceptor的调用过程:在这个拦截器设计中,我们可以对Requ...原创 2019-02-23 17:26:21 · 534 阅读 · 0 评论