<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Wild_Young的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Wild_Young</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Wild_Young]]></copyright><item><title><![CDATA[softmax函数反向传播]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/121912675</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/121912675</guid><author>Wild_Young</author><pubDate>Mon, 13 Dec 2021 20:29:16 +0800</pubDate><description><![CDATA[1.softmax函数

设，，

则，显然。

例如：，则

2.softmax函数求导

（1）当i=j时



（2）当i!=j时



综上所述：

所以

3.softmax 函数的一个性质



这里X是向量，c是一个常数。下面证明左右两边的每一个分量相等。

证明：





实际应用：为了防止溢出，事先把x减去最大值。最大值是有效数据，其他值溢不溢出可管不了，也不关心。

4.softmax函数+交叉熵代价函数



这里的是真实值，是训练的目标，取0或1.在求导的时候是常量。是...]]></description><category></category></item><item><title><![CDATA[LRU算法]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/120129266</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/120129266</guid><author>Wild_Young</author><pubDate>Mon, 06 Sep 2021 12:50:09 +0800</pubDate><description><![CDATA[对于开发者而言，缓存的接触必不可少，无论是浏览器缓存(如果是chrome浏览器，可以通过chrome:://cache查看)，还是服务端的缓存(通过memcached或者redis等内存数据库)。缓存不仅可以加速用户的访问，同时也可以降低服务器的负载和压力。那么，了解常见的缓存淘汰算法的策略和原理就显得特别重要。

常用的缓存算法：


	OPT：优先淘汰最长时间内不会被访问的页面
	
优点：缺页率最小，性能最好

缺点：无法实现


	FIFO：优先淘汰最先进入内存的页面
	
优点：实现简单

缺点：性能]]></description><category></category></item><item><title><![CDATA[操作系统——协程]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/120047080</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/120047080</guid><author>Wild_Young</author><pubDate>Wed, 01 Sep 2021 19:33:17 +0800</pubDate><description><![CDATA[协程

协程（Coroutines）是一种比线程更加轻量级的存在，正如一个进程可以拥有多个线程一样，一个线程可以拥有多个协程。

协程不是被操作系统内核所管理的，而是完全由程序所控制，也就是在用户态执行。这样带来的好处是性能大幅度的提升，因为不会像线程切换那样消耗资源。

为什么需要协程

我们都知道多线程，当需要同时执行多项任务的时候，就会采用多线程并发执行。拿手机支付举例子，当收到付款信息的时候，需要查询数据库来判断余额是否充足，然后再进行付款。

假设最开始我们只有可怜的10个用户，收到10条付款消息]]></description><category></category></item><item><title><![CDATA[数据库的常用日志]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119964960</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119964960</guid><author>Wild_Young</author><pubDate>Sat, 28 Aug 2021 11:43:46 +0800</pubDate><description><![CDATA[幂等性

数据库日志文件中的操作记录应该具有幂等性，同一个操作执行多次，结果是一样的。因为日志在故障恢复过程中，可能会被回放多次。

查询日志

数据库的查询日志记录了每一条sql语句；
	访问量较大时建议不开启，因为设想一下如果同时又几百万个用户同时访问数据库，查询日志的记录就会占用大量的系统开销，直接影响服务器性能；

vim /etc/my.cnf.d/server.cnf 
	general_log = ON| OFF            #查询日志开关
	general_log_file loc]]></description><category></category></item><item><title><![CDATA[C++11智能指针]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119955391</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119955391</guid><author>Wild_Young</author><pubDate>Fri, 27 Aug 2021 20:19:00 +0800</pubDate><description><![CDATA[0 前言

C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持，并且第一个已经被C++11弃用。

1 概念

智能指针主要用于管理在堆上分配的内存，它将普通的指针封装为一个栈对象。当栈对象的生存周期结束后，会在析构函数中释放掉申请的内存，从而防止内存泄漏。简要的说，智能指针利用了 C++ 的 RAII 机制，在智能指针对象作用域结束后，会自动做内存释放的相关操作，不需要我们再手动去操作内存。

2 分类和使用

2.1]]></description><category></category></item><item><title><![CDATA[数据库——mvcc简介]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119942345</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119942345</guid><author>Wild_Young</author><pubDate>Thu, 26 Aug 2021 23:48:57 +0800</pubDate><description><![CDATA[1.mvcc简介

1.1 什么是mvcc？

MVCC是一种多版本并发控制机制。

1.2 mvcc解决什么问题？

我们在了解MVCC之前，首先先了解一下几个比较常见的锁。

读锁：也叫共享锁、S锁，若事务T对数据对象A加上S锁，则事务T可以读A但不能修改A，其他事务只能再对A加S锁，而不能加X锁，直到T释放A上的S 锁。这保证了其他事务可以读A，但在T释放A上的S锁之前不能对A做任何修改。写锁：又称排他锁、X锁。若事务T对数据对象A加上X锁，事务T可以读A也可以修改A，其他事务不能再对A加任何锁，直到]]></description><category></category></item><item><title><![CDATA[设计模式——策略模式]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119802702</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119802702</guid><author>Wild_Young</author><pubDate>Thu, 19 Aug 2021 15:27:39 +0800</pubDate><description><![CDATA[1、策略模式

策略模式是指定义一系列的算法，把它们单独封装起来，并且使它们可以互相替换，使得算法可以独立于使用它的客户端而变化，也是说这些算法所完成的功能类型是一样的，对外接口也是一样的，只是不同的策略为引起环境角色环境角色表现出不同的行为。

相比于使用大量的if...else，使用策略模式可以降低复杂度，使得代码更容易维护。

缺点：可能需要定义大量的策略类，并且这些策略类都要提供给客户端。

1.1、传统的策略模式实现


/*
* 关键代码：实现同一个接口。
* 以下代码实例中，以游戏角色不同的攻]]></description><category></category></item><item><title><![CDATA[设计模式——适配器模式]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119802302</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119802302</guid><author>Wild_Young</author><pubDate>Thu, 19 Aug 2021 15:08:13 +0800</pubDate><description><![CDATA[1、适配器模式

适配器模式可以将一个类的接口转换成客户端希望的另一个接口，使得原来由于接口不兼容而不能在一起工作的那些类可以在一起工作。通俗的讲就是当我们已经有了一些类，而这些类不能满足新的需求，此时就可以考虑是否能将现有的类适配成可以满足新需求的类。适配器类需要继承或依赖已有的类，实现想要的目标接口。

缺点：过多地使用适配器，会让系统非常零乱，不易整体进行把握。比如，明明看到调用的是 A 接口，其实内部被适配成了 B 接口的实现，一个系统如果太多出现这种情况，无异于一场灾难。因此如果不是很有必要，可以]]></description><category></category></item><item><title><![CDATA[设计模式分类]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119798580</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119798580</guid><author>Wild_Young</author><pubDate>Thu, 19 Aug 2021 11:42:40 +0800</pubDate><description><![CDATA[一、设计模式的分类 
总体来说设计模式分为三大类： 
创建型模式，共五种：工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 
结构型模式，共七种：适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 
行为型模式，共十一种：策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 
其实还有两类：并发型模式和线...]]></description><category></category></item><item><title><![CDATA[设计模式——代理模式]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119798082</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119798082</guid><author>Wild_Young</author><pubDate>Thu, 19 Aug 2021 11:29:49 +0800</pubDate><description><![CDATA[代理模式：为其它对象提供一种代理以控制这个对象的访问。在某些情况下，一个对象不适合或者不能直接引用另一个对象，而代理对象可以在客户端和目标对象之间起到中介作用。

优点：


	职责清晰。真实的角色只负责实现实际的业务逻辑，不用关心其它非本职责的事务，通过后期的代理完成具体的任务。这样代码会简洁清晰。
	
	
	代理对象可以在客户端和目标对象之间起到中介的作用，这样就保护了目标对象。
	
	
	扩展性好。
	

/*
* 关键代码：一个是真正的你要访问的对象(目标类)，一个是代理对象,真正对象与代理对象实现]]></description><category></category></item><item><title><![CDATA[设计模式——单例模式]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119779717</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119779717</guid><author>Wild_Young</author><pubDate>Thu, 19 Aug 2021 10:59:04 +0800</pubDate><description><![CDATA[1、单例模式

单例模式顾名思义，保证一个类仅可以有一个实例化对象，并且提供一个可以访问它的全局接口。实现单例模式必须注意一下几点：


	单例类只能由一个实例化对象。
	
	
	单例类必须自己提供一个实例化对象。
	
	
	单例类必须提供一个可以访问唯一实例化对象的接口。
	
步骤：

构造函数私有化
	增加静态私有的当前类的指针变量
	提供静态对外接口，可以让用户获得单例对相关
单例模式分为懒汉和饿汉两种实现方式。

1.1、懒汉单例模式

懒汉：故名思义，不到万不得已就不会去实例化类，也就是说在第一次]]></description><category></category></item><item><title><![CDATA[设计模式——工厂模式]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119773378</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119773378</guid><author>Wild_Young</author><pubDate>Wed, 18 Aug 2021 10:59:50 +0800</pubDate><description><![CDATA[1、工厂模式

在工厂模式中，我们在创建对象时不会对客户端暴露创建逻辑，并且是通过使用一个共同的接口来指向新创建的对象。工厂模式作为一种创建模式，一般在创建复杂对象时，考虑使用；在创建简单对象时，建议直接new完成一个实例对象的创建。

1.1、简单工厂模式

主要特点是需要在工厂类中做判断，从而创造相应的产品，当增加新产品时，需要修改工厂类。使用简单工厂模式，我们只需要知道具体的产品型号就可以创建一个产品。

缺点：工厂类集中了所有产品类的创建逻辑，如果产品量较大，会使得工厂类变的非常臃肿。


/*
关]]></description><category></category></item><item><title><![CDATA[计算机网络重点]]></title><link>https://blog.youkuaiyun.com/Wild_Young/article/details/119205775</link><guid>https://blog.youkuaiyun.com/Wild_Young/article/details/119205775</guid><author>Wild_Young</author><pubDate>Thu, 29 Jul 2021 14:44:04 +0800</pubDate><description><![CDATA[计算机网络主要就是TCP/IP协议栈

TCP/IP协议体系的认知
 分层，一部分用户，一部分内核；层与层的透明性；传输在每一层对等

数据链路层
以太网帧的格式

MTU的概念

ARP协议：报文格式、查询原理、ARP缓存/RARP协议

MAC地址和IP地址互查的概念

网络层
IP首部格式：16位分片标识、DF不分片标志、MF更多分片标志、13位片偏移

IP分片（如何避免）

IP选路

ICMP协议：报文格式、报文的两大分类：查询+差错

传输层
UDP协议：特点、首部各个字段

...]]></description><category></category></item></channel></rss>