<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[丁香枝上，豆蔻梢头]]></title><description><![CDATA[提出问题，解决问题，是我前进的动力]]></description><link>https://blog.youkuaiyun.com/Pg_dog</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Pg_dog]]></copyright><item><title><![CDATA[Cookie和Session学习]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/118088401</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/118088401</guid><author>Pg_dog</author><pubDate>Mon, 21 Jun 2021 21:35:15 +0800</pubDate><description><![CDATA[Session机制
可以放在文件，数据库或者内存都可以，是以键值对的形式存储。
使用场景
当客户端向服务器端发送一个请求时，服务器端首先会先检查请求里是否包含一个Session标识（sessionID），如果包含，说明之前已经为此客户端创建过session，然后就检索出来使用，如果没有，服务端会为此客户端创建一个session，并将sessionID在本次响应中返回给客户端保存。
session保存方法
1，cookie保存
服务器通过设置cookie的方式将sessionID发送给客户端，如果不设置过期时]]></description><category></category></item><item><title><![CDATA[HTTP学习]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/118082259</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/118082259</guid><author>Pg_dog</author><pubDate>Mon, 21 Jun 2021 15:30:24 +0800</pubDate><description><![CDATA[概念简介
超文本传输协议（HyperText transfer Protocol），他是基于TCP/IP协议的应用层协议，一般用于B/S架构。
特点
1，支持客户端/服务端模式（C/S）
2，简单快速：请求服务时只需传送请求方法和路径。常用的方法：GET，HEAD，POST，PUT，DELETE
3，灵活：可以传输任意类型的数据对象（标记：Content-Type）
4，无连接：每次连接只处理一个请求。一次请求响应完成后断开连接。后面通过connection:keep-alive实现长连接
5，无状态：是一]]></description><category></category></item><item><title><![CDATA[UDP与TCP高频面试题]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/118001477</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/118001477</guid><author>Pg_dog</author><pubDate>Fri, 18 Jun 2021 17:15:39 +0800</pubDate><description><![CDATA[**
1，特点与区别
**
UDP(用户数据报协议)：无连接，不可靠，快，面向数据报（对应用程序传下来的报文不合并也不拆分，只添加UDP首部），没有拥塞控制，支持1:1,1:n,n:1,n:n。
TCP(传输控制协议)：面向连接，可靠，慢，面向字节流（对应用程序传下来的报文看成字节流，组织成大小不等的数据块），有流量控制，拥塞控制，提供全双工通信，支持1:1。
2，TCP的三次握手和四次挥手
-&gt; 见我的另一篇文章
3， TCP短连接和长连接区别与应用场景
短连接：完成一次读写后就可以关闭了，管理简单]]></description><category></category></item><item><title><![CDATA[Redis学习]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/117920876</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/117920876</guid><author>Pg_dog</author><pubDate>Tue, 15 Jun 2021 20:37:16 +0800</pubDate><description><![CDATA[1，数据存储概况
redis是内存数据库，数据结构数据库，kv数据库
内存数据库（性能出色，容量限制于物理内存）：

redis特点：
1，单线程的（文件事件分派器队列的消费是单线程的，4.0后有了多线程概念（多线程删除对象），6.0在网络ID处理方面上了多线程，执行命令的核心模块还是单线程）
2，性能出色；
3，支持丰富的数据类型；
4，支持事务。都是原子操作；
Redis支持主从模式：
分布式读写分离模型：master用来插入数据，slave提供检索服务。为了避免masterDB的单点故障，集群一般采用]]></description><category></category></item><item><title><![CDATA[ETCD学习]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/117755393</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/117755393</guid><author>Pg_dog</author><pubDate>Thu, 10 Jun 2021 03:14:51 +0800</pubDate><description><![CDATA[1，ETCD是一个键值对数据存储系统（开源，分布式）
2，用途：提供共享配置、服务发现。
3，leader选举非常优秀，leader选举更换对前端是无感知的。（raft算法）
4，读写数据在ETCD上，支持快照及查看历史事件
5，数据模型：一个持久的并发控制数据模型，适用于较小的元数据键值对的处理
功能介绍
本身状态查看（集群成员信息、集群状态、leader状态等
键值数据的读写：set，get
租约：带有Id的定时器，可以和多个存储键值关联（自动过期删除）
观察者：分布式系统中间有大量的信号同步，这个就可]]></description><category></category></item><item><title><![CDATA[STL容器总结]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/117702126</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/117702126</guid><author>Pg_dog</author><pubDate>Tue, 08 Jun 2021 18:27:07 +0800</pubDate><description><![CDATA[序列式容器：
vector：
变长容器，可以根据数据的插入删除来重新构建容器容量。它是由三个迭代器来表示（起始字节位置，最后一个元素位置，占用的所有内存末尾位置），底层存储接口还是数组。
array：
(c++11新加的)：和普通数组一样，都属于定长容器。只是封装了许多常用的接口，方便使用。
注：vector和array提供了size和判空获取机制；
vector和array提供了两个容器对象内容交换方法；
迭代器失效问题。
list:
有双向链表实现（有的是双向循环列表），内存数据是不连续的，所以需要指针]]></description><category></category></item><item><title><![CDATA[CSP并发模型]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/105212576</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/105212576</guid><author>Pg_dog</author><pubDate>Tue, 31 Mar 2020 00:08:40 +0800</pubDate><description><![CDATA[不要以共享内存的方式来通信，相反，要通过通信来共享内存
Go语言的并发模型参考的是CSP理论（Go推荐的，通信顺序进程，一种并发编程模型），另一种就是多线程共享内存，在访问共享数据时，通过锁来访问，因此衍生出了许多方便的数据结构，叫做“线程安全的数据结构”。
Go的CSP并发模型
CSP = goroutine + Channel
Goroutine
实际并发执行的实体，它底层是使用协程(coro...]]></description><category></category></item><item><title><![CDATA[游戏上线问题总结]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/102811125</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/102811125</guid><author>Pg_dog</author><pubDate>Thu, 31 Oct 2019 00:27:16 +0800</pubDate><description><![CDATA[1，Log问题（吃过亏才会重视）
游戏上线后，随着玩家数据量的剧增，许多bug就会随之出现，但同时有些bug是很难复现的，这时候定位问题就不可能通过打断点来进行查找，这时候完整的log信息才是定位问题的关键。
log等级：
Trace:
Debug:
Info:
Warn:
Fatal:
2，recover使用（循环时处理/加锁时处理）
3，线程panic崩溃，使得channel读端出错，导致ch...]]></description><category></category></item><item><title><![CDATA[批量GM指令处理]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/102620737</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/102620737</guid><author>Pg_dog</author><pubDate>Fri, 18 Oct 2019 12:06:49 +0800</pubDate><description><![CDATA[1，在游戏目录中新创建一个txt文件
2，编辑文件内容，如下(根据自己需求)：
#unlock
#setquest 13606
#setlevel 29
#additems 1001 1

3，解析文件内容发送服务端，逻辑如下（Lua）：
local GMFilePath = "GMFile/"

function splist(str,reps)
	local result = {}
	stri...]]></description><category></category></item><item><title><![CDATA[Go问题]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/89016249</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/89016249</guid><author>Pg_dog</author><pubDate>Tue, 20 Aug 2019 18:49:21 +0800</pubDate><description><![CDATA[//错误代码
this.tombPlayerData = make(map[AvatarID]TTombPlayerData)
this.ParentZone.GetSpaceHolder().ForeachPlayer(func(player INodePlayer) bool {
	this.tombPlayerData[player.GetAvatarID()].RoleName = pla...]]></description><category></category></item><item><title><![CDATA[Git/SVN工作中常见问题]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/99459348</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/99459348</guid><author>Pg_dog</author><pubDate>Wed, 14 Aug 2019 10:39:07 +0800</pubDate><description><![CDATA[1，（Git）commit时勾选了不需要提交的文件，想撤销commit
解决方案：
输入指令：git reset --soft 	HEAD^(回到上一个版本，或者可以是HEAD~1)
git reset --soft HEAD^(回到上一个版本，或者可以是HEAD~1，如果进行了两次commit，就使用HEAD~2)

这里有几个参数注意：
--mixed  
	(不删除工作空间改动代码，撤销gi...]]></description><category></category></item><item><title><![CDATA[地图的可拖动功能以及点击寻路坐标问题]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/99336010</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/99336010</guid><author>Pg_dog</author><pubDate>Mon, 12 Aug 2019 21:57:38 +0800</pubDate><description><![CDATA[需求：由于地图中展示的元素增加，导致地图图片被放大，在地图界面不能完全显示，所以添加可拖动功能。
解决方案很简单：prefab调整， 逻辑编写（打开地图，玩家的图标尽可能靠中心位置）
一，在prefab上进行的调整

注：上图中m_MapBG_img是地图界面中地图显示框，m_miniMap_img是地图资源
在第一层级中添加两个组件(自查)：Rect Mask 2D 和 scroll Rect
...]]></description><category></category></item><item><title><![CDATA[MYSQL表（表数据）删除]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/91374037</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/91374037</guid><author>Pg_dog</author><pubDate>Mon, 10 Jun 2019 14:07:53 +0800</pubDate><description><![CDATA[　　本文主要讲mysql中三种删除表的操作，delete语句、truncate语句以及drop语句的区别：
delete
1、删除整张表的数据：
delete from table_name;

2、删除部分数据，添加where子句：
delete  from table_name where...;

3、说明 
　　１）、属于DML语言，每次删除一行，都在事务日志中为所删除的每行记录一项。产...]]></description><category></category></item><item><title><![CDATA[Unity3D 文章收藏]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/89880503</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/89880503</guid><author>Pg_dog</author><pubDate>Mon, 06 May 2019 13:11:53 +0800</pubDate><description><![CDATA[1，UGUI——RectTransform详解
https://blog.youkuaiyun.com/serenahaven/article/details/78826851
2，

]]></description><category></category></item><item><title><![CDATA[版本管理与控制之分支介绍]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/88948671</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/88948671</guid><author>Pg_dog</author><pubDate>Mon, 01 Apr 2019 15:15:19 +0800</pubDate><description><![CDATA[GIT
鉴于我们一般在idea中进行git操作，因此，使用idea作为git的可视化操作工具举例，其它的工具(比如SourceTree大同小异)。
如下图，这里表示你当前所处的分支(图例中为master)

1，创建本地分支
单击"master"，根据你的本地分支情况，大致出现如下图：

其中，Local Branches为你当前的本地分支，Remote Branches为远程分支。如果你以前创建...]]></description><category></category></item><item><title><![CDATA[lua队列、栈，字典实现]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/88913507</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/88913507</guid><author>Pg_dog</author><pubDate>Sat, 30 Mar 2019 15:41:48 +0800</pubDate><description><![CDATA[简单队列实现
--@class LuaQueue
LuaQueue = class("LuaQueue")

function LuaQueue:ctor()
	self.front = 1
	self.last = 0
	self.count = 0
	self.objects = {}
end

function LuaQueue:EnQueue(object)
	self.last = se...]]></description><category></category></item><item><title><![CDATA[lua层与C#层的交互]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/88807051</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/88807051</guid><author>Pg_dog</author><pubDate>Tue, 26 Mar 2019 10:48:55 +0800</pubDate><description><![CDATA[在我现在参与的这个项目中，游戏前端代码主要用Lua进行逻辑书写，C#提供许多接口。这里呢我来简单举个例子来进行说明。
1，在C#层写一个简单测试代码，如下：
public class Test : MonoBehaviour
{
    public Transform Tip;   --在Unity界面可以直接通过拖动对应组件进行赋值
    // Start is called before ...]]></description><category></category></item><item><title><![CDATA[Unity  之 Canvas]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/88764553</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/88764553</guid><author>Pg_dog</author><pubDate>Sat, 23 Mar 2019 17:19:48 +0800</pubDate><description><![CDATA[Canvas.ForceUpdateCanvases 强制更新画布
描述
强制更新所有画布的内容。
在最后一帧画布执行布局和内容生产的计算，仅在渲染之前，为了确保在该帧期间发生的最新的改变在画布上。这意味着在返回调用开始和首次更新返回调用时，画布下的布局和内容可能不是最新的。

...]]></description><category></category></item><item><title><![CDATA[有关时间戳的整理]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/79968317</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/79968317</guid><author>Pg_dog</author><pubDate>Mon, 16 Apr 2018 23:13:13 +0800</pubDate><description><![CDATA[提供一个很好的在线工具网站：https://tool.lu/c/developer 
什么是时间戳？


  Unix时间戳：是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。


获取当前时间戳 
Go：

import (
  &quot;time&quot;
)
int32(time.Now().Unix())

C#：

(DateT...]]></description><category></category></item><item><title><![CDATA[Unity3D游戏中Android本地推送通知整理]]></title><link>https://blog.youkuaiyun.com/Pg_dog/article/details/79968179</link><guid>https://blog.youkuaiyun.com/Pg_dog/article/details/79968179</guid><author>Pg_dog</author><pubDate>Mon, 16 Apr 2018 23:00:16 +0800</pubDate><description><![CDATA[现在手游中出现了越多的定时通知的需求，因为是固定时间推送，所以不需要通过服务器进行推送，只需要利用各个平台自己的本地推送机制就可以实现这个功能。 
在Unity3D官方提供的API中，UnityEngine.iOS中有一个类：LocalNotification 
它只实现了iOS的本地推送，即仅适用于iphone/ipad/ipod Touch. 
Unity3D API链接：https://do...]]></description><category></category></item></channel></rss>