- C# Interlocked的使用
深渊!
c#开发语言
学习来源:《CLRviaCbyJeffreyRichter》第四版,第29章,29.3.2互锁构造internalclassMultiWebRequests{//这个辅助类协调所有异步操作privateAsyncCoordinatorm_ac=newAsyncCoordinator();privateDictionarym_servers=newDictionary(){{"http://www.
- 多线程同步
隐士Xbox
jvmc#自动化
C#中线程同步常用方法1.Mutex类(互斥器),Monitor类,lock方法2.ManualResetEvent类,AutoResetEvent类(这两个都是由EventWaitHandle类派生出来的)3.ReaderWriterLock类维护自由锁(InterLocked)实现同步监视器(Monitor)和互斥锁(lock)读写锁(ReadWriteLock)系统内核对象互斥(Mutex)
- .NET进阶篇09-async异步、thread多线程4
咸鱼不太咸
知识需要不断积累、总结和沉淀,思考和写作是成长的催化剂一、锁数据库中也有锁概念,行锁,表锁,事物锁等,锁的作用就是控制并发情况下数据的安全一致,使一个数据被操作时,其他并发线程等待。开发方面多线程并行编程访问共享数据时,为保证数据的一致安全,有时需要使用锁来锁定对象来达到同步.NET中提供很多线程同步技术。有lock,Interlocked,Monitor等用于进程内同步锁,Mutex互斥锁,Se
- C# 浅谈线程同步Lock、Monitor、Interlocked、Mutex等多种线程锁及测试汇总
简单的绿竹
多线程.net(C#)c#开发语言后端
https://blog.csdn.net/qq_42537006/article/details/104949841?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_sour
- c#线程同步系列(二) c#中ReaderWriterLock的使用
xwdpepsi
C#.netc#.net微软windows活动工作
到这一篇,在Windows下主流的线程同步方法已经都讲过了,包括穿插提到的Interlocked类,那都是我们传统的曾经学到过的概念。除此之外,.Net提供了一些特有的东西来帮助我们方便地完成代码,于是便有这一篇中要讨论的读写锁。ReaderWriterLock锁的好处它跟Monitor一样,是.Net的原生类,不再与操作系统有什么瓜葛。回想Monitor、EventWaitHandle两篇中,关
- C# 线程同步(6)- 读写锁 ReaderWriterLock
snakorse
C#基础
到这一篇,在Windows下主流的线程同步方法已经都讲过了,包括穿插提到的Interlocked类,那都是我们传统的曾经学到过的概念。除此之外,.Net提供了一些特有的东西来帮助我们方便地完成代码,于是便有这一篇中要讨论的读写锁。ReaderWriterLock锁的好处它跟Monitor一样,是.Net的原生类,不再与操作系统有什么瓜葛。回想Monitor、EventWaitHandle两篇中,关
- Lock使用及效率分析(C#)
谷棵
C#数据处理算法c#多线程lock
针对无Lock、Lock、ReadWriterLock、ReadWriterLockSlim四种方式,测试在连续写的情况下,读取的效率(原子操作Interlocked由于使用针对int,double等修改的地方特别多,而且使用范围受限,所以本文章没有测试)先说结论:锁类型每分钟运行次数1每分钟运行次数2每分钟运行次数3平均无lock97998684805410369707429891871339.
- 【C++】 Qt-线程并发与线程同步
程序员懒羊羊
C++进阶之路Qtc++qt开发语言
文章目录线程并发线程同步原子访问(InterLocked)关键段(Critical_Section,也叫临界区)回顾单例出现的问题关键段基本使用封装关键段Qt下的多线程多线程与进度条Qt-QThread线程并发我们再创建一个控制台文件命名为main2.cpp,然后在这个文件中创建三条线程,在这三条中同时为一个全局变量进行递增操作,并在最后输出这个全局变量。intmain(intargc,char*
- 【C#】各种锁
软泡芙
开发#WEB_C#c#锁
文章目录概述锁用户模式锁内核模式锁1、事件锁2、信号量3、互斥锁4、读写锁动态计数动态计数锁CountdownEvent原子操作类:Interlocked监视锁lock关键字Monitor来源概述锁:解决多线程中的数据共享安全问题。一提到线程同步,就会提到锁,作为线程同步的手段之一,锁总是饱受质疑。一方面锁的使用很简单,只要在代码不想被重入的地方(多个线程同时执行的地方)加上锁,就可以保证无论何时
- C# 原子操作
weixin_39926429
c#visualstudio开发语言
在C#中,可以使用“System.Threading.Interlocked“类提供的原子操作来确保多线程环境下的数据同步和线程安全。以下是一些常用的原子操作:1.“Interlocked.Increment(refintlocation)“:原子地将指定变量的值加1,并返回新值。2.“Interlocked.Decrement(refintlocation)“:原子地将指定变量的值减1,并返回新
- 【C# .NET】chapter 13 使用多任务改进性能和可扩展性
十年一梦实验室
c#.netjvm
目录一、物理内存和虚拟内存使用(Recorder类)二、对比string的“+”操作与stringbuilder操作的处理效率,内存消耗情况,三、异步运行任务、三种启动任务方法、将上一任务方法处理结果作为参数传给下一任务方法四、嵌套子任务五、同步访问共享资源Monitor.TryEnter、Monitor.Exit、原子操作Interlocked.Increment六、理解async和await:
- 线程同步——用户模式下线程同步——Interlocked实现线程同步
weixin_30832143
1线程同步分为用户模式下的线程同步和内核对象的线程同步。23当然用户模式下的线程同步实现速度比内核模式下快,但是功能也有局45678//1.利用原子访问:Interlocked系列函数,关于Interlocked系列函数,我需要知道的是他们,执行的极快910//(1)首先是InterlockedExchangeAdd兄弟函数,11//第一个参数Addend代表进行操作数的地址,12//第二个参数V
- C#之:线程同步 Interlocked类
haixin-561
C#多线程并行和异步c#多线程
Interlocked:为多个线程共享的变量提供原子操作。Interlocked:是一个静态类,不能够被实例化。内部有许多方法,有兴趣的小伙伴可以看一下微软的官方文档,连接>>:Interlocked一般的变量自增如:i++,不是线程安全的,它的操作包括从内从中内存获取一个值,然后给该值递增1,再将他存回内存中。这样的操作可能会被线程调度器打断。Interlocked类提供了线程安全的方式递增,递
- C# 多线程二:原子操作Interlocked 互锁的理解和简单示例
一梭键盘任平生
C#基础知识#线程Threadc#
一.多线程的线程安全多线程安全问题原因是在cpu执行多线程时,在执行的过程中可能随时切换到其他的线程上执行,当多个线程同时操作同一个变量时,如果不施加其他措施,可能导致错误数据的出现二.Interlocked的特点Interlocked是为多个线程共享的变量提供原子操作,这个类是一个静态类它提供了以线程安全的方式递增、递减、交换和读取值的方法。它的特点是:(1)、相对于其他线程同步技术,速度会快很
- C# 浅析并行任务同步机制——Interlocked
fervour
技术积累多线程javac++servlet
一、定义:为多个线程共享的变量提供原子操作。i++和i--这种原子操作,都不是线程安全的,它的操作包括从内存中读取一个值,给值递增或递减,然后再将它存储回内存。这些操作都有可能会被线程调度器打断。以线程安全的方式递增、递减、交换和读取值的方法。二、优缺点:优点:与其他技术相比,较快。缺点:只能用于简单的同步问题。三、例子publicintState{get{lock(this){return++_
- 【C#】线程同步--《C#本质论》
阿月浑子2021
C#c#开发语言
目录一、使用Monitor来同步二、使用lock来同步三、避免锁定this、typeof(type)和string四、Interlocked类五、避免死锁六、更多同步类型(1)Mutex(2)WaitHandle(3)重置事件类:ManualResetEvent和ManualResetEventSlim(4)Semaphore/SemaphoreSlim和CountdownEvent(5)并发集合
- 详解从ObjectPool到CAS指令
目录源码解析私有字段构造方法Get方法Return方法关于Interlocked.CompareExchange总结相信最近看过我的文章的朋友对于Microsoft.Extensions.ObjectPool不陌生;复用、池化是在很多高性能场景的优化技巧,它能减少内存占用率、降低GC频率、提升系统TPS和降低请求时延。那么池化和复用对象意味着同一时间会有多个线程访问池,去获取和归还对象,那么这肯定
- 引擎之旅 Chapter.2 线程库
ZhuSenLin_BLOG
C++GameDev-Enginewindowsc++开发语言
预备知识可参考我整理的博客Windows编程之线程:https://www.cnblogs.com/ZhuSenlin/p/16662075.htmlWindows编程之线程同步:https://www.cnblogs.com/ZhuSenlin/p/16663055.html文章目录代码结构线程同步的实现原子函数与关键段Interlocked家族函数的封装关键段的封装内核对象的同步方式代码结构S
- 为什么有的人把代码写的如此复杂?
格格巫 MMQ!!
java模型c#javaui
技术群里有人发了一段代码:附言:兄弟们,这个单例怎么样?我回复:什么鬼,看不懂啊?!也有其他小伙伴表示看不懂,看来大家的C#基础和我一样并不全面。我看不懂,主要是因为我没用过TaskCompletionSource和Interlocked的CompareExchange方法,然后经过我1、2个小时的研究,终于勉强看懂了。由于上面这段代码只贴了一张图,我没有拿到源码,所以我写了个差不多的Demo用于
- 为什么有的人把代码写的如此复杂?
秋荷雨翔
技术群里有人发了一段代码:附言:兄弟们,这个单例怎么样?我回复:什么鬼,看不懂啊?!也有其他小伙伴表示看不懂,看来大家的C#基础和我一样并不全面。我看不懂,主要是因为我没用过TaskCompletionSource和Interlocked的CompareExchange方法,然后经过我1、2
- C#多线程之线程锁
目录一、Mutex类二、Mutex的用途三、Semaphore信号量1、简介2、初始化3、WaitOne()和Release()四、Monitor类典型的生产者与消费者实例五、Lock六、InterLocked(相当于lock,对整数)1、Interlocked类主要方法2、实例一、Mutex类“mutex”是术语“互相排斥(mutuallyexclusive)”的简写形式,也就是互斥量。互斥量跟
- C#并行编程之Task同步机制
目录一、隔离执行:不共享数据,让每个task都有一份自己的数据拷贝。1、传统方式2、ThreadLocal类二、同步类型:通过调整task的执行,有序的执行task。1、Lock锁2、Interlocked联锁3、Mutex互斥体三、申明性同步四、并发集合五、Barrier(屏障同步)在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合。虽然task自带了两个方法:task.Continue
- C#多线程系列之线程完成数
解决一个问题假如,程序需要向一个Web发送5次请求,受网路波动影响,有一定几率请求失败。如果失败了,就需要重试。示例代码如下:classProgram{privatestaticintcount=0;staticvoidMain(string[]args){for(inti=0;i{HttpRequest();}).Start();return;}//完成一次任务,+1Interlocked.Ad
- C#多线程系列之原子操作
目录知识点竞争条件线程同步CPU时间片和上下文切换阻塞内核模式和用户模式Interlocked类1,出现问题2,Interlocked.Increment()3,Interlocked.Exchange()4,Interlocked.CompareExchange()5,Interlocked.Add()6,Interlocked.Read()知识点竞争条件当两个或两个以上的线程访问共享数据,并且
- Lazy Initialization
pillowBalcony
YoucoulduseLazyclass.BydefaultitwillsupportLazyThreadSafetyMode.ExecutionAndPublication.Oryoucandolikethis:SnippetfromQueue:objectSyncRoot{get{if(_syncRoot==null)Interlocked.CompareExchange(ref_syncRo
- c#中多线程间的同步示例详解
目录一、引入二、Lock三、Monitor四、Interlocked五、Semaphore六、Event七、Barrier八、ReaderWriterLockSlim九、Mutex十、ThreadLocal,AsyncLocal,Volatile十一、有意思的示例总结一、引入先给出一个Num类的定义internalclassNum{publicstaticintodd=50000;publicst
- c# 进程内部的同步
在线程里,如果需要共享数据,那么一定需要使用同步技术,确保一次只有一个线程访问和改变共享数据的状态。在.net中,lock语句、Interlocked类和Monitor类可用于进程内部的同步。1、lock语句与线程安全lock语句是设置锁定和解除锁定的一种简单方式。在使用lock语句之前,先进入另一个争用条件。例如:publicclassSharedState{publicintState{get
- Windows平台利用Interlocked系列api实现读写锁
bingo_hzy
Windows在Vista和Server2008以后才开始提供读写锁API,即SRW系列函数(InitializeSRWLock,AcquireSRWLockShared,AcquireSRWLockExclusive等)。网上也有很多读写锁实现,基本上都是用互斥量对象和信号量对象实现。但是对于读写锁这种特殊的锁(锁住时间短)自旋的方式等待应该更合适,用Interlocked系列函数实现读写锁纯粹
- C# 多线程并发下各种锁的性能
阿鹏哥哥01
c#c#底层探索c#游戏服务器开发回顾
一般情况下,只要涉及到多线程编程,程序的复杂性就会显著上升,性能显著下降,BUG出现的概率大大提升。多线程编程本意是将一段程序并行运行,提升数据处理能力,但是由于大部分情况下都涉及到共有资源的竞争,所以修改资源对象时必须加锁处理。但是锁的实现有很多种方法,下面就来一起了解一下在C#语言中几种锁的实现与其性能表现。几种锁的运用方式1、原子锁通过原子操作Interlocked.CompareExcha
- C# 温故而知新:线程篇(三)
weixin_30916125
c#操作系统
C#温故而知新:线程篇(三)线程同步篇(上)线程同步中的一些重要概念临界区(共享区)的概念基元用户模式基元内核模式原子性操作非阻止同步阻止同步详解Thread类中的VolatileRead和VolatileWrite方法和Volatile关键字的作用Volatile关键字的作用介绍下Interlocked介绍下Lock关键字详解ReaderWriterLock类本章总结参考文献1.线程同步中的一些
- JVM StackMapTable 属性的作用及理解
lijingyao8206
jvm字节码Class文件StackMapTable
在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版
- 回调函数调用方法
百合不是茶
java
最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下
代码很简单:
MainDemo :调用方法 得到方法的返回结果
- [时间机器]制造时间机器需要一些材料
comsci
制造
根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质
和材料...
甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......
 
- 开口埋怨不如闭口做事
邓集海
邓集海 做人 做事 工作
“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。 张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。
- jQuery插件开发全解析,类级别与对象级别开发
IT独行者
jquery开发插件 函数
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给
jQuery添加新的全局函数,相当于给
jQuery类本身添加方法。
jQuery的全局函数就是属于
jQuery命名空间的函数,另一种是对象级别的插件开发,即给
jQuery对象添加方法。下面就两种函数的开发做详细的说明。
1
、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer
- Rome解析Rss
413277409
Rome解析Rss
import java.net.URL;
import java.util.List;
import org.junit.Test;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.S
- RSA加密解密
无量
加密解密rsa
RSA加密解密代码
代码有待整理
package com.tongbanjie.commons.util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerat
- linux 软件安装遇到的问题
aichenglong
linux遇到的问题ftp
1 ftp配置中遇到的问题
500 OOPS: cannot change directory
出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了
修改方法:1 修改/etc/selinux/config 中SELINUX=disabled
2 source /etc
- 面试心得
alafqq
面试
最近面试了好几家公司。记录下;
支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败;
阿里金融,面试官人也挺和善,只不过我让他吐血了。。。
由于印象比较深,记录下;
1,自我介绍
2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型)
3,什么是包装类,包装类的优点;
4,平时看过什么书?NND,什么书都没看过。。照样
- java的多态性探讨
百合不是茶
java
java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况
//package 1;
class A{
public void test(){
System.out.println("A");
}
}
class D extends A{
public void test(){
S
- 网络编程基础篇之JavaScript-学习笔记
bijian1013
JavaScript
1.documentWrite
<html>
<head>
<script language="JavaScript">
document.write("这是电脑网络学校");
document.close();
</script>
</h
- 探索JUnit4扩展:深入Rule
bijian1013
JUnitRule单元测试
本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。
在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte
- [CSS]CSS浮动十五条规则
bit1129
css
这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。
1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了
- 【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景
bit1129
partition
0.Kafka服务器配置
3个broker
1个topic,6个partition,副本因子是2
2个consumer,每个consumer三个线程并发读取
1. Producer
package kafka.examples.multibrokers.producers;
import java.util.Properties;
import java.util.
- zabbix_agentd.conf配置文件详解
ronin47
zabbix 配置文件
Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个
- java--19.用矩阵求Fibonacci数列的第N项
bylijinnan
fibonacci
参考了网上的思路,写了个Java版的:
public class Fibonacci {
final static int[] A={1,1,1,0};
public static void main(String[] args) {
int n=7;
for(int i=0;i<=n;i++){
int f=fibonac
- Netty源码学习-LengthFieldBasedFrameDecoder
bylijinnan
javanetty
先看看LengthFieldBasedFrameDecoder的官方API
http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html
API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:
实
- AES加密解密
chicony
加密解密
AES加解密算法,使用Base64做转码以及辅助加密:
package com.wintv.common;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decod
- 文件编码格式转换
ctrain
编码格式
package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
- mysql 在linux客户端插入数据中文乱码
daizj
mysql中文乱码
1、查看系统客户端,数据库,连接层的编码
查看方法: http://daizj.iteye.com/blog/2174993
进入mysql,通过如下命令查看数据库编码方式: mysql> show variables like 'character_set_%'; +--------------------------+------
- 好代码是廉价的代码
dcj3sjt126com
程序员读书
长久以来我一直主张:好代码是廉价的代码。
当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。
当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。”
我只
- Android网络请求库——android-async-http
dcj3sjt126com
android
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
- ORACLE 复习笔记之SQL语句的优化
eksliang
SQL优化Oracle sql语句优化SQL语句的优化
转载请出自出处:http://eksliang.iteye.com/blog/2097999
SQL语句的优化总结如下
sql语句的优化可以按照如下六个步骤进行:
合理使用索引
避免或者简化排序
消除对大表的扫描
避免复杂的通配符匹配
调整子查询的性能
EXISTS和IN运算符
下面我就按照上面这六个步骤分别进行总结:
- 浅析:Android 嵌套滑动机制(NestedScrolling)
gg163
android移动开发滑动机制嵌套
谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性
NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]-->
比如你使用了Toolbar,下面一个ScrollView,向上滚
- 使用hovertree菜单作为后台导航
hvt
JavaScriptjquery.nethovertreeasp.net
hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。
0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm
hovertree插件包含文件:
http://keleyi.com/jq/hovertree/css
- SVG 教程 (二)矩形
天梯梦
svg
SVG <rect> SVG Shapes
SVG有一些预定义的形状元素,可被开发者使用和操作:
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>
- 一个简单的队列
luyulong
java数据结构队列
public class MyQueue {
private long[] arr;
private int front;
private int end;
// 有效数据的大小
private int elements;
public MyQueue() {
arr = new long[10];
elements = 0;
front
- 基础数据结构和算法九:Binary Search Tree
sunwinner
Algorithm
A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
- 项目出现的一些问题和体会
Steven-Walker
DAOWebservlet
第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。
这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。
dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。
&
- 高手问答:Java老A带你全面提升Java单兵作战能力!
ITeye管理员
java
本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论!
作者简介:
淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。
CSDN博客地址:
http://blog.csdn.net/xieyuooo
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,