Mongo C# 操作(元素 数组 )
来源:互联网 发布:中国软件杯官网 编辑:程序博客网 时间:2024/05/23 01:56
先看下我的Bson结构:
{
"_id" : ObjectId("56e2642e6f29584fa01d02be"),
"deviceId" : "25a3928850c31fffbb470fb18d082c42191d9eb3",
"avatarName" : "CCC",
"avatarIndex" : 2,
"avatarLevel" : 1,
"avatarCreateTime" : "2016/3/11 14:22:38",
"economy" : {
"glod" : -2236
},
"friend" : [["Q1Q"], ["23EE#"]],
"message" : {
"QQQ" : [{
"content" : "你大爷的?",
"sendTime" : ISODate("2016-03-15T02:23:27.743Z")
}, {
"content" : "你大爷的?",
"sendTime" : ISODate("2016-03-15T02:23:32.706Z")
}]
}
}
具体操作如下,
#region //设备登录信息 /// <summary> /// 设备登录服务器 插入时间 /// </summary> /// <param name="deviceId">设备ID</param> /// <param name="devicename">设备类型</param> /// <returns></returns> public bool DeviceLogin(string deviceId, string devicename) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery device = Query.EQ("deviceID", deviceId); BsonDocument bson = mongoCollection.FindOne(device); if (bson == null) { BsonArray loginDetail = new BsonArray { DateTime.Now.ToString() }; BsonDocument doc = new BsonDocument(); doc.Add("deviceID", deviceId); doc.Add("deviceType", devicename); doc.Add("registerTime", DateTime.Now.ToString()); doc.Add("LoginCount", 1); doc.Add("loginDetail", loginDetail); Console.WriteLine("{0}: 创建设备账号! 设备ID :{1}, 机型 :{2} ", collectionName, deviceId, devicename); return mongoCollection.Insert(doc).Ok; } else { IMongoQuery query = Query.EQ("deviceID", deviceId); UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument{ {"LoginCount", 1 } } }, { "$addToSet", new QueryDocument{ { "loginDetail", DateTime.Now.ToString() } } } }; Console.WriteLine("{0}: 登录设备账号! 设备ID :{1}, 机型 :{2} ", collectionName, deviceId, devicename); return mongoCollection.Update(query, update).Ok; } } catch (Exception e) { stateMessage = e.ToString(); Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName); Console.WriteLine( stateMessage ); return false; } } /// <summary> /// 设置玩家等级 /// </summary> /// <param name="avatarName"></param> /// <param name="level"></param> /// <returns></returns> public bool UpdateAvatarLevel(string avatarName, int level) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.EQ("avatarName", avatarName); UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument { { "avatarLevel", level } } } }; if (mongoCollection.Update(query, update).Ok) { Console.WriteLine("{0}角色:{1},设置角色等级成功 ", collectionName, avatarName); return true; } else { Console.WriteLine("{0}角色:{1},设置角色等级失败 ", collectionName, avatarName); return false; } } catch (Exception e) { Console.WriteLine("{0}角色:{1},设置角色等级异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString()); stateMessage = e.ToString(); } return false; } #endregion #region//玩家具体信息 /// <summary> /// 创建玩家角色 /// </summary> /// <param name="deviceId">设备ID</param> /// <param name="avatarName">角色昵称</param> /// <param name="avatarIndex">角色ID</param> /// <param name="avatrLevel">角色等级</param> /// <returns></returns> public bool CreateAvatr(string deviceId, string avatarName, byte avatarIndex, short avatrLevel) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery device = Query.EQ("avatarName", avatarName); BsonDocument bson = mongoCollection.FindOne(device); if (bson == null) { BsonDocument doc = new BsonDocument(); doc.Add("deviceId", deviceId); doc.Add("avatarName", avatarName); doc.Add("avatarIndex", avatarIndex); doc.Add("avatarLevel", avatrLevel); doc.Add("avatarCreateTime", DateTime.Now.ToString()); Console.WriteLine("{0}:设备:{1},创建角色:昵称:{2},索引:{3},等级:{4} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel); return mongoCollection.Insert(doc).Ok; } else { Console.WriteLine("{0}:设备:{1},创建角色失败:昵称:{2},索引:{3},等级:{4}, ErrorMessage:{5} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel, "昵称已经存在"); stateMessage = "昵称已经存在"; return false; } } catch (Exception e) { Console.WriteLine("{0}:设备:{1},创建角色异常:昵称:{2},索引:{3},等级:{4}, ErrorMessage:{5} ", collectionName, deviceId, avatarName, avatarIndex, avatrLevel, e.ToString()); stateMessage = e.ToString(); return false; } } // <summary> // 返回角色列表 // </summary> // <param name="deviceId"></param> // <returns></returns> public List<Avatars> GetAvatarList(string deviceId) { List<Avatars> avatarlist = new List<Avatars>(); MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.EQ("deviceId", deviceId); FieldsDocument fddoc = new FieldsDocument(); fddoc.Add("avatarName", 1); fddoc.Add("avatarIndex", 1); fddoc.Add("avatarLevel", 1); MongoCursor<BsonDocument> doc = mongoCollection.Find(query).SetFields(fddoc); foreach (BsonDocument bs in doc) { Avatars avatar = new Avatars(); if (bs.Contains("avatarName")) avatar.avatarName = (string)bs["avatarName"]; if (bs.Contains("avatarIndex")) avatar.avatarIndex = (Byte)bs["avatarIndex"]; if (bs.Contains("avatarLevel")) avatar.avatarLevel = (short)bs["avatarLevel"]; avatarlist.Add(avatar); } Console.WriteLine("{0}设备:{1},返回角色列表, 角色个数{2} ", collectionName, deviceId, avatarlist.Count); } catch (Exception e) { Console.WriteLine("{0}设备:{1},返回角色列表异常, ErrorMessage:{3} ", collectionName, deviceId, e.ToString()); stateMessage = e.ToString(); } return avatarlist; } #endregion #region //角色任务 /// <summary> /// 获取玩家的任务 /// </summary> /// <param name="avatarName"></param> /// <returns></returns> public List<TaskDetail> GetAvatarTask(string avatarName) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); List<TaskDetail> taskDetail = new List<TaskDetail>(); try { //IMongoQuery query = Query.EQ("avatarName", avatarName); IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("task")); BsonArray bson = mongoCollection.FindOne(query)["task"].AsBsonArray; if ( bson != null) { foreach (BsonDocument bdoc in bson) { TaskDetail task = new TaskDetail(); if (bdoc.Contains("taskType")) task.taskType = ((Byte)bdoc["taskType"]); if (bdoc.Contains("taskID")) task.taskID = (Byte)bdoc["taskID"]; if (bdoc.Contains("taskState")) task.taskState = ((Byte)bdoc["taskState"]); if (bdoc.Contains("lastTime")) task.lastTime = bdoc["lastTime"].AsDateTime; taskDetail.Add(task); } } Console.WriteLine("{0}角色:{1},返回角色任务列表,个数为{2} ", collectionName, avatarName, taskDetail.Count); } catch (Exception e) { //Console.WriteLine("{0}角色:{1},返回角色任务列表异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString()); stateMessage = e.ToString(); Console.WriteLine( stateMessage ); } return taskDetail; } /// <summary> /// 删除一个角色 /// </summary> /// <param name="avatartName"></param> /// <returns></returns> public bool RemoveAvatar(string avatartName) { List<Avatars> avatarlist = new List<Avatars>(); MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.EQ("avatarName", avatartName); if (mongoCollection.Remove(query).Ok) { Console.WriteLine("{0}设备:{1},删除角色列表成功 ", collectionName, avatartName); return true; } else { Console.WriteLine("{0}设备:{1},删除角色列表失败 ", collectionName, avatartName); return false; } } catch (Exception e) { Console.WriteLine("{0}设备:{1},删除角色列表异常, ErrorMessage:{3} ", collectionName, avatartName, e.ToString()); stateMessage = e.ToString(); return false; } } public bool SetAvatarTask(string avatarName, TaskDetail task) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { BsonDocument doc = new BsonDocument(); doc.Add("taskID", task.taskID); doc.Add("taskType", task.taskType); doc.Add("taskState", task.taskState); doc.Add("lastTime", task.lastTime); IMongoQuery query = Query.EQ("avatarName", avatarName); UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "task", doc } } } }; Console.WriteLine("{0}: 设置任务成功! 角色名称 avatarName:{1} 任务类型 task.taskType:{2} ", collectionName, avatarName, task.taskType); return mongoCollection.Update(query, update).Ok; } catch (Exception e) { stateMessage = e.ToString(); Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName); return false; } } public bool UpdateAvatarTask(string avatarName, TaskDetail task) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); //mongoServer.RequestStart( mongoDatabase ); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { BsonDocument doc = new BsonDocument(); doc.Add("taskID", task.taskID); doc.Add("taskType", task.taskType); doc.Add("taskState", task.taskState); doc.Add("lastTime", task.lastTime); //IMongoQuery query = Query.EQ( "avatarName", avatarName ); IMongoQuery query = Query.And( Query.EQ("avatarName", avatarName), Query.EQ("task.taskID", task.taskID )); QueryDocument queryDoc = new QueryDocument { { "avatarName", avatarName }, { "task.taskID", task.taskID } }; //UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "task.$.taskState", task.taskState } } }, // }; //UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "task.$.taskType", task.taskType } } }, // new QueryDocument { { "task.$.taskState", task.taskState } } , // new QueryDocument { { "task.$.lastTime", task.lastTime } } , // UpdateDocument updates = new UpdateDocument(); updates.Add("task.$.taskType", task.taskType); updates.Add("task.$.taskState", task.taskState); updates.Add("task.$.lastTime", task.lastTime); UpdateDocument update = new UpdateDocument { { "$set", updates }}; // mongoServer.RequestDone(); if (mongoCollection.Update(query, update).Ok) { Console.WriteLine("{0}: 设置任务成功! 任务类型 task.taskType:{1} ", collectionName, task.taskType); return true ; } else { Console.WriteLine("{0}: 设置任务失败! 任务类型 task.taskType:{1} ", collectionName, task.taskType); return true; } } catch (Exception e) { stateMessage = e.ToString(); Console.WriteLine("数据库操作错误! 集合名称{0}", collectionName); Console.WriteLine(stateMessage); // mongoServer.RequestDone(); return false; } } #endregion #region//经济系统 /// <summary> /// 获取经济系统数据 /// </summary> /// <param name="name"></param> /// <returns></returns> public Economy GetEconomy(string avatarName) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); Economy economy = new Economy(); try { IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("economy")); BsonDocument doc = mongoCollection.FindOne(query)["economy"].AsBsonDocument; if (doc != null) { if (doc.Contains("glod")) economy.glod = (int)doc["glod"].AsInt32; if (doc.Contains("glodTotal")) economy.glodTotal = (int)doc["glodTotal"].AsInt32; if (doc.Contains("silver")) economy.silver = (int)doc["silver"].AsInt32; if (doc.Contains("silverTotal")) economy.silverTotal = (int)doc["silverTotal"].AsInt32; return economy; } Console.WriteLine("{0}角色:{1},返回经济系统 ", collectionName, avatarName); } catch (Exception e) { // stateMessage = e.ToString(); Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage); } return null; } /// <summary> /// 设置经济系统数据 /// </summary> /// <param name="name"></param> /// <param name="economy"></param> /// <returns></returns> public bool SetEconomy(string avatarName, Economy economy) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { BsonDocument doc = new BsonDocument(); doc.Add("glod", economy.glod); doc.Add("glodTotal", economy.glodTotal); doc.Add("silver", economy.silver); doc.Add("silverTotal", economy.silverTotal); IMongoQuery query = Query.EQ("avatarName", avatarName); UpdateDocument update = new UpdateDocument { { "$set", new QueryDocument { { "economy", doc } } } }; if ( mongoCollection.Update(query, update).Ok ) { Console.WriteLine("{0}角色:{1},设置经济系统成功 ", collectionName, avatarName); return true; }else { Console.WriteLine("{0}角色:{1},设置经济系统失败 ", collectionName, avatarName); return false; } } catch (Exception e) { Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString()); stateMessage = e.ToString(); return false; } } /// <summary> /// 消耗充值金币 /// </summary> /// <param name="avatarName"></param> /// <param name="count"></param> /// <returns></returns> public bool ExpendEconomy( string avatarName, int count ) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.EQ("avatarName", avatarName); BsonDocument doc = new BsonDocument(); doc.Add(); UpdateDocument update = new UpdateDocument { { "$inc", new QueryDocument { { "economy.glod", count } } } }; if (mongoCollection.Update(query, update).Ok) { Console.WriteLine("{0}角色:{1},设置经济系统成功 ", collectionName, avatarName); return true; } else { Console.WriteLine("{0}角色:{1},设置经济系统失败 ", collectionName, avatarName); return false; } } catch (Exception e) { Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, e.ToString()); stateMessage = e.ToString(); } return false; } #endregion #region//好友系统 /// <summary> /// 获取好友列表 /// </summary> /// <param name="avatarName">获取好友列表</param> /// <returns>玩家数组</returns> public string[] GetFriendList(string avatarName) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); List<string> friend = new List<string>(); try { IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("friend")); BsonArray doc = mongoCollection.FindOne(query)["friend"].AsBsonArray; Console.WriteLine( doc.Count ); if (doc != null) { string[] friendName = new string[doc.Count]; for (int i = 0; i < doc.Count; i ++ ) { friendName[i] = doc[i].ToString(); } return friendName; } return null; } catch (Exception e) { // stateMessage = e.ToString(); //Console.WriteLine("{0}角色:{1},返回经济系统异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage); } return null; } /// <summary> /// 添加好友 /// </summary> /// <param name="friend"></param> /// <param name="avatarName"></param> /// <returns></returns> public bool AddFriend(string friend, string avatarName) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.EQ("avatarName", avatarName) ; BsonArray friendArray = new BsonArray(); friendArray.Add( friend ); UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "friend", friendArray } } } }; if (mongoCollection.Update(query, update).Ok) { Console.WriteLine("{0}角色:{1},添加好友成功 ", collectionName, avatarName); return true; } else { Console.WriteLine("{0}角色:{1},添加好友失败 ", collectionName, avatarName); return false; } } catch (Exception e) { stateMessage = e.ToString(); Console.WriteLine("{0}角色:{1},添加好友异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage); } return false; } /// <summary> /// 删除好友 /// </summary> /// <param name="friendName"></param> /// <param name="tagName"></param> /// <returns></returns> public bool RemoveFriend(string friend, string avatarName) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("friend")); BsonArray friendArray = new BsonArray(); friendArray.Add(friend); UpdateDocument update = new UpdateDocument { { "$pull", new QueryDocument { { "friend", friendArray } } } }; if (mongoCollection.Update(query, update).Ok) { Console.WriteLine("{0}角色:{1},删除好友成功 ", collectionName, avatarName); return true; } else { Console.WriteLine("{0}角色:{1},删除好友失败 ", collectionName, avatarName); return false; } } catch (Exception e) { stateMessage = e.ToString(); Console.WriteLine("{0}角色:{1},删除好友异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage); } return false; } #endregion #region//离线消息 /// <summary> /// 获取玩家离线消息 并且清空消息队列 /// </summary> /// <param name="avatarName"></param> /// <returns></returns> public Dictionary<string, List<Message>> GetOffLineMessage(string avatarName) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); Dictionary<string, List<Message>> msgDict = new Dictionary<string, List<Message>>(); try { IMongoQuery query = Query.And(Query.EQ("avatarName", avatarName), Query.Exists("message")); BsonDocument bson = mongoCollection.FindOne(query)["message"].AsBsonDocument; if (bson != null) { var bEle = bson.Elements; //List<BsonElement> bElea = (List<BsonElement>) bson.Elements; Console.WriteLine(bEle.GetType()); foreach (BsonElement bdoc in bEle) { string msgName = bdoc.Name; BsonArray doc = bdoc.ToBsonDocument()["Value"].AsBsonArray; List<Message> msgList = new List<Message>(); foreach (BsonDocument docs in doc) { Message msg = new Message(); msg.from = msgName; if (docs.Contains("content")) msg.content = docs["content"].ToString(); if (docs.Contains("sendTime")) msg.sendTime = docs["sendTime"].AsDateTime; msgList.Add(msg); } msgDict.Add(msgName, msgList); } UpdateDocument update = new UpdateDocument { { "$unset", new QueryDocument{ {"message", ""} } } }; mongoCollection.Update(query, update); return msgDict; } else { return null; } } catch (Exception e) { stateMessage = e.ToString(); } return null; } /// <summary> /// 添加好友离线消息 /// </summary> /// <param name="message"></param> /// <returns></returns> public bool AddOffLineMessage(string avatarName, Message message) { MongoClient mongoClient = new MongoClient(connection); MongoServer mongoServer = mongoClient.GetServer(); MongoDatabase mongoDatabase = mongoServer.GetDatabase(databaseName); MongoCollection<BsonDocument> mongoCollection = mongoDatabase.GetCollection(collectionName); try { IMongoQuery query = Query.EQ("avatarName", avatarName); BsonDocument doc = new BsonDocument(); doc.Add("content", message.content ); doc.Add("sendTime", message.sendTime); UpdateDocument update = new UpdateDocument { { "$addToSet", new QueryDocument { { "message." + message.from, doc } } } }; if (mongoCollection.Update(query, update).Ok) { Console.WriteLine("{0}角色:{1},离线消息添加成功 ", collectionName, avatarName); return true; } else { Console.WriteLine("{0}角色:{1},离线消息添加失败 ", collectionName, avatarName); return false; } } catch (Exception e) { stateMessage = e.ToString(); Console.WriteLine("{0}角色:{1},添加离线消息添加异常, ErrorMessage:{3} ", collectionName, avatarName, stateMessage); } return false; } #endregion
0 0
- Mongo C# 操作(元素 数组 )
- mongo-pymongo 数组操作
- mongo操作数组字段
- mongo 删除内嵌数组元素
- mongo对内嵌数组的操作
- c#数组查找元素
- C# 数组元素查找
- C#访问数组元素
- mongo基本操作(转)
- jquery操作数组元素
- Jquery操作数组元素(-)
- 数组指针操作元素
- mongo操作
- Mongo操作
- mongo操作
- 移除数组中的元素(操作原数组)
- APR中的数组元素操作
- PHP数组元素操作实例
- 从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记
- Kendo UI常用示例汇总(一)
- openwrt 16M分区格式
- Android volley 解析(三)之文件上传篇
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- Mongo C# 操作(元素 数组 )
- 【Java】JAVA中的throws和throw的区别
- VI下一些实用的文本编辑技巧(持续更新)
- FP-Growth算法
- LeetCode:Shell题目
- Android App 性能优化实践
- 百度前端技术学院 任务四:定位和居中问题
- java的getClass()函数
- CAM表含义及各层交换机介绍