自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(238)
  • 资源 (13)
  • 收藏
  • 关注

原创 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势: 1、可以避免由于Java的单继承特性而带来的局限; 2、增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的; 3、适合多个相同程序代码的线程区处理同一资源的情况。 下面以典型的买票程序(基本都是以这个为例子)为例,来说明二者的区别。

2013-12-06 10:15:33 58043 33

原创 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)

在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,就需要把变量声明为volatile(不稳定的),这就指示JVM,这个变量是不稳

2013-12-06 08:29:23 27015 10

原创 【Java并发编程】之四:守护线程与线程阻塞的四种情况

转载请注明出处:       Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)      用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时

2013-12-05 21:28:08 16975 4

原创 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)

转载请注明出处:    Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件,另外,在长时间计算期间挂起线程也可能导致问题。    下面的代码演示了通过休眠来延缓运行,模拟长时间运行的情况,使线程更可能在不适当的时候被挂起:pu

2013-12-04 08:12:30 26491 7

原创 【Java并发编程】之二:线程中断(含代码)

转载请注明出处:使用interrupt()中断线程    当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。    下面一段代码演示了休眠线程的中断public class SleepInterrupt extends Object implements Runnab

2013-12-03 16:08:06 27339 13

原创 【网络协议】HTTP协议笔记

1.HTTP规定在HTTP客户与HTTP服务器之间的每次交互,都由一个ASCII码串构成的请求和一个“类MIME(MIME—like)”的相应组成。HTTP报文通常都是用TCP连接    2.从层次的角度看,HTTP是面向事务的应用层协议。所谓事务,就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,即要么所有信息交换都完成,要么一次交换都不进行。    3.HTTP协议本身

2013-12-02 07:59:38 10200 15

原创 【Java并发编程】之一:可重入内置锁

每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在推出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。    当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果摸个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获

2013-11-28 23:32:13 21709 16

原创 Android之自定义Adapter

在ListView中经常用到适配器Adapter,android提供的三种Adapter主要有ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,ArraAdapter是简单的字符串适配器,在实际项目中很少会用到(功能太有限),SimpleAdapter可以自定义ListView的每个Item的布局,一般在简单的布局中会考虑使用,而SimpleCursor

2013-11-27 17:16:32 5033

转载 Android之MVC模式

MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。一个逻辑模型可以对于多种视图模型,比如一批统计数据你可以分别用柱状图、饼图来表示。一种视图模型也可以对于多种逻辑模型。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式,而C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新,这与《设计模式》中的观察者模式是完

2013-11-22 15:48:53 7318 6

原创 用eclipse编写Android程序时怎样生成apk文件

APK是Android Package的缩写,即Android安装包。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。下面我们一起来看看在Android中如何生成APK文件。

2013-11-20 08:01:57 40529

原创 【Java TCP/IP Socket】Socket编程知识点总结

转载请注明出处:TCP/IP Sockets in java 读书笔记第1章:简介1、协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析。2、TCP/IP协议族有IP协议、TCP协议和UDP协议。3、TCP协议和UDP协议使用的地址叫做端口号,用来区分同一主机上的不同应用程序。TCP协议和UDP协议也

2013-11-19 08:10:50 9934 1

原创 最近状态不太好

距离2014校招季还有不到一年时间了,越发感觉知识极度匮乏,好多书要看,好多知识要学,还要做项目。前两周学习效率总体还是不错的,看了2遍《Java TCP/IP Socket 编程》,总结了10多篇笔记,确实学到了很多东西,尤其了解了Socket套接字的一些底层的实现机制。本来打算继续看《Java 并发编程实战》,但是左思右想,还是花一周时间把Android视频实时传输项目完善下吧,毕竟老搁在这里

2013-11-18 23:56:42 4389 20

转载 几种android实时视频网络传输方案比较

以320×240大小的视频传输为例方案压缩率压缩/传输方式实时性平均流量消耗传输距离用camera的回调函数发送原始的yuv420数据0无压缩,按帧传输高(20~30 fps)很高(6.5 Mbps)近距离有线或无线用MediaRecorder对yuv420进行H26

2013-11-18 14:23:57 8026

原创 【Java TCP/IP Socket】深入剖析socket——TCP套接字的生命周期

转载请注明出处:   TCP连接的建立     新的Socket实例创建后,就立即能用于发送和接收数据。也就是说,当Socket实例返回时,它已经连接到了一个远程终端,并通过协议的底层实现完成了TCP消息或握手信息的交换。     客户端连接的建立     Socket构造函数的调用与客户端连接建立时所关联的协议事件之间的关系下图所示:          当

2013-11-17 22:25:20 11082

原创 【Java TCP/IP Socket】深入剖析socket——TCP通信中由于底层队列填满而造成的死锁问题(含代码)

转载请注明出处:     基础准备   首先需要先了解下数据传输的底层实现机制,在http://blog.csdn.net/ns_code/article/details/15813809这篇博客中有详细的介绍,在上面的博客中,我们提到了SendQ和RecvQ缓冲队列,这两个缓冲区的容量在具体实现时会受一定的限制,虽然它们使用的实际内存大小会动态地增长和收缩,但还是需要一个硬性

2013-11-16 08:19:29 9733 3

原创 【Java TCP/IP Socket】深入剖析socket——数据传输的底层实现

转载请注明出处:    底层数据结构    如果不理解套接字的具体实现所关联的数据结构和底层协议的工作细节,就很难抓住网络编程的精妙之处,对于TCP套接字来说,更是如此。套接字所关联的底层的数据结构集包含了特定Socket实例所关联的信息。比附,套接字结构除其他信息外还包含:    1、该套接字所关联的本地和远程互联网地址和端口号。    2、一个FIFO(First Im

2013-11-15 09:02:00 23550 1

原创 【Java TCP/IP Socket】基于NIO的TCP通信(含代码)

NIO主要原理及使用    NIO采取通道(Channel)和缓冲区(Buffer)来传输和保存数据,它是非阻塞式的I/O,即在等待连接、读写数据(这些都是在一线程以客户端的程序中会阻塞线程的操作)的时候,程序也可以做其他事情,以实现线程的异步操作。   考虑一个即时消息服务器,可能有上千个客户端同时连接到服务器,但是在任何时刻只有非常少量的消息需要读取和分发(如果采用线程池或者一线程一客

2013-11-15 09:00:52 22202 4

原创 【Java TCP/IP Socket】Java NIO Socket VS 标准IO Socket

简介    Java  NIO从JDK1.4引入,它提供了与标准IO完全不同的工作方式。NIO包(java.nio.*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O类中的一些问题。    1、 Buffer:它是包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。    2、 Charset:它提供Unicode字符串影射到字节序列以及逆影

2013-11-12 08:08:08 7592 4

翻译 JAVA NIO Introduction

原文地址:http://tutorials.jenkov.com/java-nio/index.html    Java NIO (New IO) 是一个可供选择的 Java API (从Java 1.4引入),它可以替代标准的java IO API。它提供了一种与标准IO不同的工作方式。    Java NIO:Channels and Buffers(通道和缓冲区)在标准的

2013-11-11 22:16:11 2940

原创 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)

问题的引出    在第一章《基本套接字》中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去,示例程序当然运行无误。     书上客户端代码如下:import java.net.Socket;import java.net.SocketException;import java.io.IOException;i

2013-11-10 18:35:32 24796 13

原创 【Java TCP/IP Socket】基于线程池的TCP服务器(含代码)

了解线程池     在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客户端对应一个线程。但是,每个新线程都会消耗系统资源:创建一个线程会占用CPU周期,而且每个线程都会建立自己的数据结构(如,栈),也要消耗系统内存,另外,当一个线程阻塞时,JVM将保存其

2013-11-08 08:23:38 25077 5

原创 【Java TCP/IP Socket】构建和解析自定义协议消息(含代码)

在传输消息时,用Java内置的方法和工具确实很用,如:对象序列化,RMI远程调用等。但有时候,针对要传输的特定类型的数据,实现自己的方法可能更简单、容易或有效。下面给出一个实现了自定义构建和解析协议消息的Demo(书上例子)。     该例子是一个简单的投票协议。这里,一个客户端向服务器发送一个请求消息,消息中包含了一个候选人的ID,范围在0~1000。程序支持两种请求:一种是查询请求

2013-11-07 18:33:48 21205 11

原创 【Java TCP/IP Socket】应用程序协议中消息的成帧与解析(含代码)

程序间达成的某种包含了信息交换的形式和意义的共识称为协议,用来实现特定应用程序的协议叫做应用程序协议。大部分应用程序协议是根据由字段序列组成的离散信息定义的,其中每个字段中都包含了一段以位序列编码(即二进制字节编码,也可以使用基于文本编码的方式,但常用协议如:TCP、UDP、HTTP等在传输数据时,都是以位序列编码的)的特定信息。应用程序协议中明确定义了信息的发送者应该如何排列和解释这些位序列,同

2013-11-07 08:13:49 14649 4

原创 帮你理清Java中字符与字节的编码关系

在 GB 2312 编码或 GBK 编码中,一个英文字母字符存储需要1个字节,一个汉字字符存储需要2个字节。 在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。在UTF-16编码中,一个英文字母字符或一个汉字字符存储 都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。    我的

2013-11-06 08:14:16 18041 10

原创 【Java TCP/IP Socket】UDP Socket(含代码)

UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接。实际上,UDP协议只实现了两个功能:    1)在IP协议的基础上添加了端口;    2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。    Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字,客户端和服务器

2013-11-04 21:00:04 43866 16

原创 【Java TCP/IP Socket】TCP Socket(含代码)

协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构、交换方式、包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP协议族有IP协议、TCP协议和UDP协议。    Java为TCP协议提供了两个类:Socket类和ServerSocket类。一个Socket实例代表了TCP连接的一个客户端,而一个ServerSocket实例代表了TCP连接的一个服务器端,一般在TCP

2013-11-03 17:03:02 77830 20

转载 技术不牛如何才拿到国内IT巨头的Offer

不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰。看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技术屌丝的同学们,是否真的与国内IT巨头遥不可及呢?当你打开这个帖子的时候,我已经默认你是此文的目标读者,也就是想进入国内一流互联网企业的非牛人应届生。你不需要拿NOI的奖,无需是开源社区名人,

2013-10-31 14:53:22 5778 2

原创 【数据结构与算法】二叉树的层序遍历

前面有篇博客详细分析了二叉树三种遍历(前序、中序、后序)方式的递归与非递归实现,参见:http://blog.csdn.net/ns_code/article/details/12977901,但把二叉树的层序遍历算法给漏掉了,实际上也不能说漏掉了,毕竟层序遍历的实现方法与这三种遍历的实现方法有所不同,因此单独拿出来分析比较合适。    二叉树的层序遍历的实现还是比较简单的,由于其层级的关系,

2013-10-27 14:51:06 35831 1

原创 详细分析局域网内通过无线实现Android端与PC端TCP/UDP通信的四种情况

Android端与PC端在局域网(可以将两者放在同一个无线路由器下,wifi连接)内通过无线实现通信要分几种具体的情况分析,这里以TCP协议的Socket通信为例来具体说明:1、Android真机与PC:由于两者在无线网局域网内肯定都有IP,因此无论哪个作为server端,哪个作为client端,都不需要进行端口重定向,直接用如下代码即可:server端:serverSocke

2013-10-26 16:49:21 12388

原创 Android实时监控项目第四篇:后台线程发送预览帧视频数据

还记得上篇提到的setPreviewCallback(Camera.PreviewCallback cb)函数吗?我们在开始预览帧视频之前,调用的它,这里要注意其内部的Camera.PreviewCallback类型的参数,我们需要写一个类继承Camera.PreviewCallback的类,在该类中覆写public void onPreviewFrame(byte[] data, Camer

2013-10-24 21:49:42 6832 6

原创 【数据结构与算法】二叉树递归与非递归遍历(附完整源码)

二叉树是一种非常重要的数据结构,很多其他数据机构都是基于二叉树的基础演变过来的。二叉树有前、中、后三种遍历方式,因为树的本身就是用递归定义的,因此采用递归的方法实现三种遍历,不仅代码简洁且容易理解,但其开销也比较大,而若采用非递归方法实现三种遍历,则要用栈来模拟实现(递归也是用栈实现的)。下面先简要介绍三种遍历方式的递归实现,再详细介绍三种遍历方式的非递归实现。一、三种遍历方式

2013-10-24 08:58:03 58208 40

原创 Android实时监控项目第三篇:通过摄像头实时预览帧视频

在第二个Activity中,我们要显示摄像头预览的视频,布局文件很简单,就一个SurfaceView组件,设置为占满整个父组件(这里不再给出),用来显示预览的视频。      在对应的Activity文件中,要获取SurfaceView的SurfaceHolder,并为其添加一个回调监听器,该监听器传入一个Callback实例,这里需要覆写Callback实例中的三个方法,分别是:publ

2013-10-21 20:01:19 14404 4

原创 Android实时监控项目第二篇:登陆界面的设计

在开始核心功能的实现之前,我们先从最简单的部分开始,设计第一个Activity界面,它主要用来获取用户输入的需要连接的PC端的IP地址。      该Activity对应的XML布局文件很简单,就不详细解释了,如下:<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:ori

2013-10-21 19:15:49 5371

原创 Android实时监控项目第一篇:项目分析及AVD模拟效果图

Android实时监控项目主要涉及Socket编程、Android摄像头对预览视频流的采集和处理等。   【1】主要实现功能:通过Android客户端摄像头采集视频数据,并实时地发送到PC端进行显示。   【2】设计思路:1、创建一个Activity,获取需要连接的PC端的IP地址(由用户输入),如果IP地址合法,则跳转到预 览视频流的Activity中;

2013-10-21 18:45:15 4508 2

转载 Android多线程应用之AnyncTask 的用法

在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只在UI线程中访问Android UI工具包       当一个程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如:

2013-10-20 21:04:59 5093 1

原创 【数据结构与算法】基本数据结构——队列的链式表示

该队列为链式队列,初建队列时,队头和队尾均指向头结点,头结点中不存放数据,只存放指针,头结点的下一个节点才开始存放数据,这这样做的目的是为了在入队和出队时方便对队列的操作,而不用考虑特殊情况。C语言源代码#include#includetypedef struct Node{ int data; struct Node *pNext;}NODE,*PNODE;

2013-10-12 15:09:00 2812 1

转载 25岁研究生拿高薪互联网的offer,意气风发的走出学校

转自北邮人论坛!! 25岁毕业,拿一万块钱月薪30岁,涨到一万五,期间无女盆友,吃10块钱盖饭,跟同学合租,挤2块钱地铁上下班,存钱25万31岁,啃老找父母要了35万块钱,买了50平米老房子一处,贷款90万,20年,月供6500。35岁0个月,认识一4分木耳,接盘玩腻的木耳结婚。35岁6个月,生了小孩,小孩眉宇间有高富帅的痕迹。

2013-10-01 11:02:15 5401 1

转载 【数据结构与算法】浅谈尾递归

在《数据结构与算法分析:C描述》(Data Structures and Algorithm Analysis In C)的第三章中,以打印链表为例,提到了尾递归(tail recursion)并指出了尾递归是使用递归极其不当的例子,它指出虽然编译器会对尾递归自动优化,但即便如此最好还是不要去写尾递归。而我在《算法精解:C语言描述》(Mastering Algorithms with C)中也

2013-09-07 23:18:03 3123 3

转载 【数据结构与算法】静态链表的游标实现

以前学习的各种链表都是由指针实现的,链表中结点的分配和回收(即释放)都是由系统提供的标准函数malloc和free动态实现的,故称之为动态链表。但是有的高级语言,如BASIC、FORTRAN等,没有提供”指针”这种数据类型,此时若想采用链表做存储结构,就必须使用”游标”来模拟指针,由程序员自己编写”分配结点”和”回收结点”的过程。    用游标实现链表,其方法是:定义一个较大的结构数组作为

2013-09-07 23:14:54 4799

原创 【数据结构与算法】基本数据结构——栈的链式表示

以下为操作栈的算法,该栈为动态栈。在该栈中,pTop指向的节点中存放该栈的栈顶数据,pBottom指向的节点的上一个节点存放该栈的栈底数据,pBottom指向的节点中不存放有效数据,这样做的目的是为了在进行入栈和出栈时方便对栈的操作,而不用考虑特殊情况操作系统:ubuntu编译软件:gcc结果截图:源代码:#include#include#inclu

2013-09-07 23:13:55 3149 3

字典树求公共前缀字符串数目

字典树求具有公共前缀的字符串数目, 对应的博客地址:http://blog.csdn.net/ns_code/article/details/21183495

2014-03-13

哈希表相关操作实现

哈希表相关操作实现。对应讲解的博客地址:http://blog.csdn.net/ns_code/article/details/20763801

2014-03-08

九大内部排序算法打包下载

源码包括:冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序等,没有实现桶排序。 每一种排序算法在我的博客中都有对应的讲解.

2014-03-05

优化冒泡排序和选择排序

冒泡排序和选择排序均用两种方法实现,原始方法和在原始方法上的改进和优化,对应博客地址:http://blog.csdn.net/ns_code/article/details/20065107

2014-02-27

插入排序和希尔排序的多种实现方法

插入排序采用三种方法实现,希尔排序根据插入排序采用的方法不同,也有三种,但是又通过改进得到一种最为简介的实现方式。所有方法的实现在博客中:http://blog.csdn.net/ns_code/article/details/20043459中有详细的讲述

2014-02-27

模式匹配—BF算法和KMP算法

模式匹配—从BF算法优化到KMP算法,含有详细注释,对应的讲述该算法的博文地址:http://blog.csdn.net/ns_code/article/details/19286279

2014-02-19

两种遍历方法实现赫夫曼编码

对之前的代码做了些改进,并增加了一种无栈非递归求赫夫曼编码的方法。加入了更详细的注释。。

2014-02-15

赫夫曼树的构建及赫夫曼编码(C语言源代码,代码中含详细注释)

C语言实现赫夫曼树的构建及赫夫曼编码的源代码,配合我的CSDN博客:http://blog.csdn.net/ns_code/article/details/19174553中的讲解,帮助你掌握Huffman编码的算法实现

2014-02-15

百度2014校园招聘笔试题

百度2014校园招聘深圳站移动软件研发岗笔试题

2013-10-05

Matlab 实例程序百例

很多实用的程序,可以拿来现用,或者稍作修改来用。很好,很实用。。。。。

2010-06-01

大学生职业生涯规划书

本人作品,可以作为模板,曾获校级十佳规划之星,并吧被推选为省级参赛作品,但因时间关系,最终放弃省赛。。

2010-06-01

简易洗衣机设计—基于Multism

实现了实验要求的全部功能,并提供了详细的论文和仿真电路图

2010-05-22

2009年全国大学生数学建模竞赛A题论文

本论文只含有论文内容,不含该题目的数据,数据可以自行在官网上下载

2010-05-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除