- 博客(50)
- 资源 (2)
- 收藏
- 关注
原创 java服务端知识点总结
临近年尾了,很多人也计划着跳槽了,在跳槽之前多准备些东西总是没有坏处的。其实面试的过程不仅仅是一次技能的考核,我们也可以在里面学到很多的东西,让我们不断的进步。这里我总结了java服务端的基础知识点,Xmind文件我已经上传到了github上了,地址是:https://github.com/Ninghan/java-,欢迎大家在评论区补充。
2017-11-07 13:18:34
1157
原创 java中如何高效判断两个容器是否有相同元素(时间复杂度为O(1))
很多时候我们需要知道两个容器是否存在相同的元素,这里以电商网站中的优惠活动为例。比如我们想知道一个商品是否参与了满件折扣活动(几件几折),已知一个商品可能会参与多种优惠活动,比如满减活动(满多少减多少)、临期降价等优惠活动。我们知道每一种优惠活动都可以创建一张优惠券,只是有些优惠券是直接和商品挂钩的,有些优惠券必须要用户领取了才能参与活动,这里我们只讨论直接和商品挂钩的优惠券。上面的问题就可以这么理
2017-08-27 22:13:50
3358
原创 高并发下的线程安全实现——线程局部变量
今天我们来讨论另外一种线程安全的实现方法。如果说互斥同步是多线程间的数据共享,那么线程局部变量就是线程间的数据隔离。ThreadLocal把共享数据的可见范围限制在同一个线程之内,这样无须同步也能实现线程之间数据不争用的问题。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本
2017-07-25 10:54:00
10037
1
原创 高并发下的线程安全实现——互斥同步
高并发下的线程安全实现——互斥同步好久没来csdn上写博客了,去年(16年)来到杭州后,忙得沉淀的时间都没有了,这段时间空闲下来,慢慢补上! 线程允许多个活动同时进行,并发下有很多东西可能出错,比如数据错误,程序运行异常。很多时候这些错误以及异常在测试中都很难重现,他们可能是间歇性的,且与时间相关,程序的行为在不同的VM上可能表现根本不同。所以设计一个线程安全的程序就显得尤为重要,尤其是在高并发环
2017-07-25 10:48:17
2685
转载 java备份以及还原mysql数据库
参考:http://xp84012493.iteye.com/blog/199290[java] view plain copy java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOu
2016-11-23 17:28:54
804
转载 JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
转载自:http://blog.youkuaiyun.com/limuzi13/article/details/44968819首先这是现在最基本的分层方式,结合了SSH架构。modle层就是对应的数据库表的实体类。Dao层是使用了Hibernate连接数据库、操作数据库(增删改查)。Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断)。Action层:引用对应的S
2016-07-07 19:42:33
1715
转载 Hessian源码浅析-HessianProxy
转载自:http://blog.youkuaiyun.com/java2000_wl/article/details/7560393Hessian客户端主要是通过proxy代理来实现 当客户端调用远程接口方法时 会被HessianProxy 代理 HessianProxy invoke方法主要做以下工作1.把调用的 方法名称 参数 序列化2.通过HttpURLConnection向服务端发送
2016-07-06 10:04:03
784
转载 Java的内存泄漏
Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。问题的提出Jav
2016-06-12 16:26:05
604
转载 BFPRT算法解决求前k(大或小)数的问题
文章转载自:http://blog.youkuaiyun.com/acdreamers/article/details/44656295通常,我们需要在一大堆数中求前K大的数,或者求前K小的。比如在搜索引擎中求当天用户点击次数排名前10000的热词;在文本特征选择中求IF-IDF值按从大到小排名前K个的等等问题,都涉及到一个核心问题,即TOP-K问题。 通常来说,TOP
2016-06-04 11:12:48
1938
2
原创 栈+哈希表(或者稀疏数组)解决安卓购物车新添加货物置顶的问题
最近在做仿淘宝购物的APP(目前已经完成,有时间就把这个项目写出来),在做购物车这一块的时候,我是把数据先转化为json数据,然后通过sharedpreferences来把数据保存到本地内存中(至少用户没有登录的情况下可以这么做),我们知道sharedpreferences是通过键值对来存储数据的(不清楚的同学请移步Android源代码分析之sharedpreferences),key值可以随便给
2016-06-01 22:06:21
1621
转载 Android源码分析之SharedPreferences
文章转载自:http://www.it165.net/pro/html/201406/15827.html在Android的日常开发中,相信大家都用过SharedPreferences来保存用户的某些settings值。Shared Preferences以键值对的形式存储私有的原生类型数据,这里的私有的是指只对你自己的app可见的,也就是说别的app是无法访问到的。客户端代码为了使用
2016-06-01 19:10:54
1546
转载 OKHttp源码解析
转载自http://frodoking.github.io/2015/03/12/android-okhttp/Android为我们提供了两种HTTP交互的方式:HttpURLConnection 和 Apache HTTP Client,虽然两者都支持HTTPS,流的上传和下载,配置超时,IPv6和连接池,已足够满足我们各种HTTP请求的需求。但更高效的使用HTTP可以让您的应用运行更快
2016-05-30 11:28:34
2187
原创 HashMap的两种遍历方式
在项目中涉及到HashMap遍历的问题,项目是用于商品订单支付。支付方式有百度支付,微信支付以及支付宝支付,如图所示:现在把这三种支付方式的标识以及RadioButton存放到HashMap中(HashMapchannels= newHashMap3)),实现的功能是:如果选择一种支付方式,那么其他的支付方式就要设置为非选中状态,并且当前的支付方式状态是之前状态
2016-05-16 18:20:05
757
原创 Android Handler中的handleMessage方法和post方法之源码剖析
我们都知道,在子线程中进行UI操作(更新UI控件)包括以下四种方法:1.Handler的handlerMessage()方法。2.Handler的post()方法。3.View的post()方法。4.Activity的runOnUiThread()方法。本文重点分析前两种方法,后面两种稍微说一下。在说第一个方法之前,让我们先来看张图片(图片来源于http://my.oschin
2016-04-16 01:38:43
8896
3
转载 Android RecyclerView 使用完全解析 体验艺术般的控件
文章转载自http://blog.youkuaiyun.com/lmj623565791/article/details/45059587; 本文出自:【张鸿洋的博客】概述RecyclerView出现已经有一段时间了,相信大家肯定不陌生了,大家可以通过导入support-v7对其进行使用。 据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:
2016-04-01 10:04:01
622
转载 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
文字转载自:http://blog.youkuaiyun.com/feng88724/article/details/6333809在进行UI布局的时候,可能经常会用到 android:gravity 和 android:layout_Gravity 这两个属性。 关于这两个属性的区别,网上已经有很多人进行了说明,这边再简单说一下。 (资料来自网络)
2016-03-28 09:52:10
866
转载 ServerSocket用法详解
在客户/服务器通信模式中,服务器端需要创建监听特定端口的ServerSocket,ServerSocket负责接收客户连接请求。本章首先介绍ServerSocket类的各个构造方法,以及成员方法的用法,接着介绍服务器如何用多线程来处理与多个客户的通信任务。本章提供线程池的一种实现方式。线程池包括一个工作队列和若干工作线程。服务器程序向工作队列中加入与客户通信的任务,工作线程不断从工作队列中取出
2016-03-18 12:55:01
84780
10
原创 关于httpurlconnection getcontentlength返回值为-1的问题
在做AsyncTask异步任务读取网络数据的时候,发现了httpUrlConnection的获取数据内容长度(connection.getContentLength())总是为-1。导致进度条一直为灰色状态。预期结果应如图所示:而现在的效果是这样的:MainActivity代码如下:import android.os.AsyncTask;import android.
2016-03-17 12:19:24
5898
1
转载 详解Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask。Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制。为了简化操作,Android1.5提供了工具类android.o
2016-03-15 16:25:00
742
转载 android inflater 用法
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用: 1、对于一个没有被载入或者想要动态载入的界面,都需要使用Layou
2016-03-05 14:42:15
612
原创 设计模式之单例模式
单例模式:用来创建独一无二的,只能有一个实例的对象的入场券。包括的角色如下:单例角色(Singleton):定义一个GetInstance方法,允许客户访问它的唯一实例。GetInstance是一个静态方法,主要负责创建自己的唯一实例。UML图如下:代码如下:public static class Singleton{ private static Si
2016-03-04 15:46:25
449
原创 设计模式之访问者模式
访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。它包括以下角色:1.访问者角色(Visitor):为该对象结构中ConcreteElement的每一个类声明一个Visit方法。2.具体访问者角色(ConcreteVisitor):实现每个由Visitor声明的操作。每个操作实现算法的一部分。3.元素
2016-03-04 15:04:31
562
原创 设计模式之代理模式
代理模式(Proxy):为其他对象提供一种代理以控制这个对象的访问。它包括下面这些角色:1.抽象对象角色(Subject):定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。2.目标对象角色(RealSubject):定义Proxy所代表的真实实体。3.代理对象角色(Proxy):保存一个引用使得代理可以访问实体,并提
2016-03-03 16:49:54
562
原创 设计模式之组合模式
组合模式原理:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。组合模式包括的成员角色有:树干(Component):组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件。树枝(Composite):定义有枝节点行为,用来存储子部件,在Component接口中实现与子部
2016-03-03 11:29:14
922
原创 设计模式之适配器模式
适配器分为两种,一种是对象适配器,另一种是类适配器,由于对象适配器使用的是组合,而类适配器使用的是继承的方式来实现两个类之间的转换的。所以根据设计模式的代码设计原则,这里只说下对象适配器,需要的元素如下:1.目标(Target):客户所期待的接口,目标可以使具体的或者抽象的类,也可以是接口。2.适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。3.被适配者(
2016-03-02 15:59:56
525
原创 设计模式之命令模式
命令模式:先看个栗子,假如你老板命令你完成一个OA项目是一个命令,接着看看其特点:1、在上面的命令中,命令的执行者肯定是聪明的你了。具体的执行方法,可能是通过vs实现,或者是通过eclipse实现,由此看来:命令要有个命令的执行者(Invoker),执行者有个执行的动作(execute),还要有个命令的执行方法(Receiver)。2、命令的发出者很明显是老板,老板还有个发出方法,
2016-03-02 11:57:53
504
原创 设计模式之观察者模式
观察者模式理论:定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。blabla......说了这么多,然而并不知道怎么实现。好!我们来想想报驾校的情形吧。很多人去报驾校,这么多人,每个人都不一样,但他们有一点是相同的,都是为了拿驾照才去报的名,也就是说他们目标一致。而作为驾校需要做的事情就是准备一张报名表格,记录报名者的信息和联系方式,然后通知他
2016-02-27 10:56:48
605
原创 设计模式之策略模式理解
不想打字了,就把以前做的笔记直接上传了,字丑勿怪!但是,针对接口/超类型编程做法会如下:Animal animal = new Dog();animal.makeSound();最后得到的结果会是狗的叫声。
2016-02-22 00:00:47
485
原创 设计模式之简单工厂模式
简单工厂模式可以把中间的处理过程看做是一个工厂,这个工厂可以根据你给的原料来制造相应的产品。比如我放进一头猪,就产出一锅美味的猪肉出来,放进去一头牛的时候就产出一盘秀玉牛扒出来,放进一头羊的时候就产出一只烤全羊出来,其实这中间的工厂程序我们可以把工厂想象成一个厂房里面有一跟巨大的管子,这根管子又包含了很多条加工型的管道,每一条管道负责产出不同的产品,这就是简单工厂模式。简单工厂模式包括三个要素,第
2016-02-21 20:51:00
513
转载 Android中Parcelable接口用法(转)
1. Parcelable接口Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing the Parcelable interface must also have a static field called CREATOR, which
2016-01-24 16:33:57
656
原创 Clone Graph
Clone an undirected graph(无向图). Each node in the graph contains a label and a list of its neighbors.OJ’s undirected graph serialization: Nodes are labeled uniquely.We use # as a separator for each nod
2015-11-16 22:58:18
592
原创 activity生命周期深入理解
举个例子:有两个ActivityA以及ActivityB,在ActivityA 上有一个按钮,点击这个按钮就会跳转至ActivityB。ActivityB上同样有一个按钮,点击这个按钮就会跳转至ActivityA。好,下面点击ActivityA上的按钮,我们会得到以下内容:A onPauseB onCreateB onStartB onRes
2015-10-24 22:52:48
614
转载 字符串匹配的KMP算法
KMP算法不太容易理解,网上有很多解释,但读起来都很费劲。直到读到Jake Boxer的文章,我才真正理解这种算法。下面,我用自己的语言,试图写一篇比较好懂的KMP算法解释。1.举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?首先,字符串"BBC ABCDAB ABCDABCDABDE"的第一个
2015-08-24 23:03:07
566
原创 2016网易校招一面总结
今天结束了网易校招的一面,面完觉得自己答得不好,有的问题没答全,有的则完全答错了,在此做一个小结,算是自我反省和督促。面试题1:C++中成员函数使用const修饰有什么意义?解析:const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。 class A { … void function()c
2015-08-22 20:25:57
2059
原创 C/C++校招笔试面试经典题目总结十
题目78:如果两段内存重叠,用memcpy函数可能会导致行为未定义。 而memmove函数能够避免这种问题,下面是一种实现方式,请补充代码。#include using namespace std;void* memmove(void* str1,const void* str2,size_t n){ char* pStr1= (char*) str1; const ch
2015-08-07 11:49:24
1991
原创 C/C++校招笔试面试经典题目总结九
题目77:struct A { char t:4; char k:4; unsigned short i:8; unsigned long m; } sizeof(A)=?(不考虑边界对齐)解析:关于这道题的答案网上有两种说法。一种说法是答案为8,另一种说法认为答案是7。仔细看这道题,与普通的求结构体长度的题目不同之处在于引入了类似char t:4这种类型,那么这到底是什么呢?
2015-07-29 17:22:15
2142
原创 C/C++校招笔试面试经典题目总结八
题目72:如下程序的时间复杂度为(其中m>1,e>0)()x = m;y = 1;while (x - y > e){x = (x + y) / 2; y = m / x;}print(x);A:log mB:m的平方C:m的1/2方D:m的1/3方解析:1.x=(x+y)/2=(m+1)/2 m非常大,则 x=m/2;y=m/x,
2015-07-24 11:32:14
2430
原创 C/C++校招笔试面试经典题目总结七
题目71:实现strtol函数,其原型如为unsigned int strtoul(const char *cp, char **endp, unsigned int base),num_str存放待转换的字符串,可以是负数也可以是正数;endptr指向第一个非法字符的地址,如果endptr为null则不指向第一个非法字符的地址;base用于指示进制,若base为0,则根据num_str的指示来转
2015-07-23 12:41:54
1102
原创 C/C++校招笔试面试经典题目总结六
题目51:写一个函数找出一个整数数组中,第二大的数(microsoft)解析:const int MINNUMBER = -32767 ;int find_sec_max( int data[] , int count){int maxnumber = data[0] ;int sec_max = MINNUMBER ;for ( int i = 1 ; i < count ; i+
2015-07-22 16:33:07
2081
原创 C/C++校招笔试面试经典题目总结五
题目41:什么是“引用”?申明和使用“引用”要注意哪些问题?解析:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据
2015-07-20 09:34:34
2264
安卓源码截屏
2015-01-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人