自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 HDFS+Spark(Hive On Spark)+Flume/Shell架构进行大数据分析

前言公司需要对数据进行运营分析,为了满足运营大数据分析的需求,决定采用hadoop进行数据分析查询经过研究打算采用如下架构游戏服通过http方式把日志消息写入到BI服务器,BI服务器通过log4j记录日志信息。然后把日志文件导入HDFS中,通过Spark进行数据的统计查询。这里把日志文件导入HDFS中有两种方法:1、flume定时把日志文件拷贝到flume监控的目录下,...

2016-12-23 17:25:43 464

原创 如何通过callback和协程来提高并发

首先要先清楚你的程序是io密集型还是cpu密集型 一般的游戏服务端都是io密集型的,主要瓶颈在于io,那么当线程在等待io操作时,cpu就空闲下来了。这样浪费了cpu性能,而且并发上不去。 callback和协程解决的原理都一样,就是遇到io操作的时候,通过callback或者协程处理当前的io操作,把当前的线程让出来,让线程去处理其他的请求,等到io操作结束了,在回到原来的线...

2016-12-23 17:22:50 335

原创 MySQL中关于insert语句速度的优化

如果同时要insert多条记录的时候,可以通过insert into table values(...),(...),(...)的方式来插入,这样可以大大提高效率。如果数据太多,可以分段,例如每1万条插入一次。每次执行的包大小默认是1M,如果超过了,可以调整msyql参数...

2016-12-23 17:22:36 254

原创 有关Future.cancel(mayInterruptIfRunning)参数的意义

不管mayInterruptIfRunning的值是true还是false,如果任务还没有开始执行,那么就会停止掉。如果任务已经执行了。那么下次任务就不会执行了。但是如果任务里面有用到while (!Thread.interrupted()),那么本次任务会一直执行,只有mayInterruptIfRunning=true马上中断线程才能停止任务。 ...

2016-08-10 15:14:52 1610

原创 spark内存溢出

spark执行任务时出现java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java heap space最直接的解决方式就是在spark-env.sh中将下面两个参数调节的尽量大    export SPARK_EXECUTOR_MEMORY=2g    export SP...

2016-07-08 18:56:12 456

原创 数据加密

客户端   游戏中的关键逻辑数据,如血量,攻击力等,容易被通用的数据修改器类外挂搜索定位并修改。因此,对于客户端逻辑中存在关键逻辑数据的游戏,需要对其进行加密。而针对修改器的模糊搜索,一般的异或加密也是不够的。     推荐方案:     影子变量。同一属性,如血量,有hp,hp_shadow1,hp_shadow2.hp采用a加密,hp_shadow1采用b加密,hp_shado...

2016-06-17 17:42:57 129

原创 sparksql和mysql性能比较

以下是在各个数据量级针对同个查询语句的消耗时间select type,count(*) as count from test group by type order by count desc; mysql 600W 3ssparksql 550W 5s mysql 1000W 5.4ssparksql 1100W 6.3s mysql 1900W 9.9s...

2016-06-16 09:58:23 2766

原创 spark jar包和log4j jar包冲突

spark jar包spark-assembly-1.6.1-hadoop2.6.0.jar中已经包含了log4j的jar包,所以当项目中包含spark-assembly-1.6.1-hadoop2.6.0.jar就无需再引用log4j.jar。但是如果需要用log4j.jar的功能,那么需要把log4j.jar放到项目的lib目录中例如在jetty中,引用第三方的jar可以放到lib/...

2016-06-02 15:25:29 699

原创 jetty+log4j

在jetty中,如果引用第三方jar包,可以把jar包放到jetty/lib/ext中。但是如果有用到log4j,那么log4j.jar需要放到war包中,放到jetty/lib/ext中没有效果

2016-06-01 22:45:47 469

原创 Collections.sort

 Collections.sort排序方法在JDK6中1表示交换,非1表示不交换,但是在JDK7中-1才表示不交互,所有有两种改法1、return new Integer(a).compareTo(new Integer(b));2、return a > b ? 1 : -1;...

2016-05-12 10:59:19 83

原创 servlet+jetty架设http服务端

一、工具eclipse java Junojetty-distribution-8.1.17.v20150415(可以从http://download.eclipse.org/jetty/下载)我用的是eclipse java版本,所以不支持发布web程序,可以通过安装插件来解决插件地址http://download.eclipse.org/releases/juno  ...

2016-03-09 10:51:15 276

原创 mysql MyISAM引擎延迟更新索引

MySQL延迟更新索引(Delayed Key Write):使用表创建选项DELAY_KEY_WRITE创建的myisam表,在查询结束后,不会将索引的改变数据写入磁盘,而是在内存的健缓冲区(In-memory key buffer)中缓存索引改变数据。它只会在清理缓存区,或关闭表时,才将索引块转储到磁盘。对于数据经常改变,并且使用频繁的表,这种模式大大提高了表的处理性能。不过,如果...

2016-01-07 11:15:53 322

原创 排行榜时时排序算法

可以维护一个定量的ArrayList,当数据变化时,通过二分查找法更新或者插入 

2015-03-16 15:14:42 518

原创 有关HashMap和ConcurrentHashMap的应用

HashMap不支持并发,但是支持排序,可以支持根据key和value来进行排序ConcurrentHashMap支持并发,但是不支持排序  

2014-10-31 15:07:22 105

原创 计算各种语言字符长度

中日韩等字符占2个字节,英文数字等占1个字节 public static int getStrByteLen(String name){  char[] chars = name.toCharArray();     int len = 0;  for (int i = 0; i < chars.length; i++) {      int k = 0x80;   if (chars...

2014-01-23 16:11:17 652

原创 DelayQueue

使用DelayQueue时,如果队列任务的run方法里面执行的代码没有做异常处理时,当发生异常时队列线程就无法继续执行了。所以任务执行的代码一定要加异常处理...

2013-10-31 11:13:38 88

原创 sfs2x如何修改端口

9933端口需要修改config目录下的server.xml和crossdomain.xml文件server.xml:修改socket port和adminTcpPortcrossdomain.xml:修改to-ports 8080端口需要修改config\jetty\jetty.xml文件...

2013-10-09 11:00:37 227

原创 for和foreach在遍历时修改列表的区别

通过for(int i = 0;i<list.size;i++)这种方式遍历列表时,如果这时候修改了list的引用,那么遍历的内容马上会变成新的list的内容;这时候新增或删除list时也不会报错,但是操作的结果会马上生效 通过for(Object obj : list)这种方式遍历列表时,如果这时候修改了list的引用,那么遍历的内容还是原list的内容,而且这时候不能对lis...

2013-08-27 18:03:45 332

原创 memcached与redis比较

1、memcached是多线程,redis是单线程(所以redis的操作都是原子操作)2、memcached在批量操作时是根据cas指令来保证数据的唯一性,redis是通过事务来保证数据的唯一性3、memcached有分布式api,redis要自己写(redis支持主从复制,可以缓解读的压力,但是要缓解写的压力就要自己写了)4、redis可以持久化,memcached不能持久化...

2013-07-22 16:56:27 91

原创 有关memcached序列化效率问题

在缓存对象到memcached时,可以直接把对象缓存到memcached中,也可以先把对象转成字符串格式,然后在缓存到memcached中,经过测试,用jaskson把对象转成字符串然后缓存到memcached中比直接把对象缓存到memcached中效率高,测试结果如下:serialize 10000 obj time : 2455deserialization 10000 obj tim...

2013-07-16 12:21:34 206

原创 java对象池

当创建的对象为中大对象时,可以采用对象池,减少创建对象的开销;但是如果是小对象的话,就直接创建了,因为维护对象池也是需要开销的。一般对象里面有大byte[] 和大char[]都可以采用对象池...

2013-07-12 11:23:01 76

原创 短连接/长连接比较

轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。优点:后端程序编写比较容易。缺点:请求中有大半是无用,浪费带宽和服务器资源。实例:适于小型应用。长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。优点:在无消息的情况下不会频繁的请求。缺点...

2013-07-10 10:08:50 118

原创 有关java volatile关键字的理解

volatile是一种程度较轻的同步机制,它的作用就是在于某个线程修改了变量之后,其他线程看到的变量值也同步了,提高了可见性。但是要通过volatile来实现真正的同步,也是有条件的1、对变量的写操作不依赖于当前值。2、该变量没有包含在具有其他变量的不变式中。满足了以上两个条件,才能通过volatile实现真正的同步第一个条件指的是n++,n=n+1这种情况第二个条件通过以...

2013-07-03 16:53:23 63

原创 获取当前时区偏移值

//获取时区偏移(例如北京时间是+8,那么以下方法获得的值就是28800000毫秒)Calendar calendar = new GregorianCalendar();System.out.println(calendar.getTimeZone().getOffset(System.currentTimeMillis()));...

2013-06-18 17:32:55 2776

原创 解决CopyOnWriteArrayList不能排序的问题

CopyOnWriteArrayList可以解决并发时候修改list的问题,但是CopyOnWriteArrayList本身是不能用Collections.sort进行排序的,所以要对CopyOnWriteArrayList进行排序,可以使用以下方法: private List<Integer> list = new CopyOnWriteArrayList<Integ...

2013-05-24 14:17:22 941

原创 有关zone分区内存数据问题

在sfs2x中,每个zone分区的内存数据都是独立的,如果每个zone分区想使用共享的数据,可以新建一个jar包放到扩展的__lib__(每个zone分区的共享目录)目录下,那么就可以实现数据共享。...

2013-04-14 22:52:04 143

原创 有关Lock和synchronized的作用范围

使用Lock和synchronized时,要保证使用同一个锁对象,这样才能保证多线程下的同步。例如有一个方法是验证名称是否重复,这时候会在这个验证方法里面加锁保证代码同步执行(例如用Lock)这时候Lock要定义成static静态全局变量,而不能定义在这个方法里面,这样才能保证每个调用这个方法的线程用的是同一个锁,才能保证代码同步执行。...

2013-03-21 11:29:48 579

原创 如何防止游戏客户端使用变速器

可以在客户端使用定时器,例如3秒钟执行一次定时器开始的时候读取系统时间  定时器结束的时候读取系统时间.  如果2个系统时间差距小于2.7秒就加速了,如果大于3.3秒就使用了减速器(10%的误差)有时候网络延迟会出现这种情况,所以可以判断连续出现这种情况多少次之后才判定用了变速器 还有如果游戏是需要在地图上移动的,那么服务端需要根据时间和移动速度来验证玩家坐标是否正确 ...

2013-03-14 14:37:46 1438

原创 多线程并发开发心得

可以通过【加锁】和【队列】来处理多线程下并发开发的问题 首先说加锁,我觉得加锁的操作是针对全局的,例如在创建用户名称时,需要验证用户名称是否唯一,这时候就可以通过加锁来防止并发调用时出现用户名一致的问题这时候要把Lock锁设置成static静态全局变量,才能保证多线程下用的是同一个锁 队列是针对局部的,例如玩家打怪,这时候可以给每只怪创建一个队列,只要让同时攻击这只怪物的玩...

2013-02-21 16:40:53 308

原创 有关List和ConcurrentHashMap遍历时修改的问题

List在迭代器遍历的时候,不能直接对List进行添加和删除,否则会报异常(删除可以用迭代器删除),所以这时候如果想对List进行操作的话,最好是把数据放到一个新的List里面,然后对新的List进行操作 List可以用for (int i = 0;i<list.size();i++)这种方式来遍历,这种遍历方式内部不锁定(遍历时添加删除不会报异常),效率最高,但是当写多线程时要...

2012-08-10 15:40:54 1023

原创 AtomicInteger—线程安全的ID自增对象

AtomicInteger,可以用做线程安全的ID自增对象,具体的资料网上搜索一下很多,这边就不列举了,下面是一个例子 public static ConcurrentHashMap<String, AtomicInteger> ID = new ConcurrentHashMap<String, AtomicInteger>(); ID.put("Char...

2012-06-20 15:48:23 673

原创 java中如何删除list项

如题,在java中如何删除list项有两种方法:一、采用Iterator方式删除List<Integer> List = new ArrayList<Integer>(); Iterator<Integer> iter = List.iterator();while (iter.hasNext()) { iter.remove();...

2012-03-31 19:52:39 245

原创 有关List类型传参的问题

当你需要把一个List对象传到其他方法进行操作时,需要传一个已经实例化好的对象过去,然后在调用的方法里面通过list.add方法来修改这个List对象。如果你传了一个List对象过去,然后在调用的方法里面进行实例化的话,那么是取不到该对象的例如以下代码:List<Integer> list = new ArrayList<Integer>(); setLi...

2012-03-27 15:38:00 753

原创 有关自定义对象序列号设置

在memcached中,如果要缓存自定义对象,那么自定义对象必须得序列化,如一下代码所示import java.io.Serializable;public class MemUser implements Serializable { private static final long serialVersionUID = 1703369482383959962L; p...

2012-03-02 17:05:17 174

原创 网页游戏系统架构图

如上图所示,一台物理服务器放三个游戏服务和一个数据库,并且有专门的memcached服务器1、当memcached服务器重启时,需要从基础数据库中读取基础数据,而用户信息是等玩家登陆之后才写入2、当游戏服务器重启时,首先需要从memcached服务器读取基础数据,如果memcached服务器不能访问,则从基础数据库中读取基础数据;接着要清空memcached服务器中对应的游戏服务器的用...

2012-03-02 15:26:11 1687

原创 网页游戏架构心得(一)

首先非常感谢Saint,跟他交谈收益颇多 有关服务器的数据架构,可以分为服务器本地内存+Memcached+DB这三块1、和客户端交互数据的就是服务端的本地内存了,这个速度是最快的,所以交互也是最频繁的(本地内存数据只保存自身服务器的数据)2、Memcached作为本地内存的备份数据,同时还提供了分布式服务器的数据共享(Memcached保存着所有服务器的数据)3、DB作为Me...

2012-03-02 11:19:19 283

原创 ConcurrentHashMap压力测试结果

1、往ConcurrentHashMap中连续写100W条数据花了2000毫秒,从这100W条数据中查询花了1毫秒2、往ConcurrentHashMap中连续写500W条数据花了18420毫秒,从这500W条数据中查询花了1毫秒3、往ConcurrentHashMap中连续写1000W条数据服务器超时 以上结果表示ConcurrentHashMap在于写的瓶颈,读没有压力 ...

2012-03-01 16:46:11 196

原创 有关mysql连接数的心得

 mysql中设置my.ini配置文件中的max_connections可以修改最大连接数,默认为max_connections=100这个连接数指的是数据库的并发连接数,当数据库的并发超过这个数量时,就会抛出异常:too many connections这时候可以修改这个数量提高数据库的并发量但是,这个值也不是可以无限制的增大,我经过测试,在windows2003 32位操作...

2012-03-01 15:06:57 109

原创 初学socket心得(一)

1、socket连接分为tcp和udp两种模式,其中tcp会自动分发并且发送的流是顺序发送的,udp完整发送(主要用的是tcp模式,这边就不讨论upd模式的了) 2、tcp模式下连续发送数据时,会把一个大数据自动分为几个数据块多次发送,也有可能把多个小数据合并在一块后一次发送,所以传输的数据格式需要封装,加上一个数据长度或者结束标志以便区分,以下是在as3客户端接收socket数据时的片段...

2012-02-27 20:59:40 145

空空如也

空空如也

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

TA关注的人

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