<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[itccccc的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/itccccc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; itccccc]]></copyright><item><title><![CDATA[适配器模式]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/105051850</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/105051850</guid><author>itccccc</author><pubDate>Mon, 23 Mar 2020 17:49:40 +0800</pubDate><description><![CDATA[手机充电的电压为5V，而普通家用电的电压为220V，为了解决这种电压不兼容的问题，我们引入了电源适配器（俗称充电器）。在软件系统中，类与类，模块与模块之间也会出现类似不兼容的现象，这时我们需要引入适配器模式来解决这个问题。

与电源适配器相似，在适配器模式中引入了一个被称为适配器（Adapter）的包装类，它相当于我们的手机充电器，而它所包装的对象称为适配者（Adaptee），即被适配的类，它相当...]]></description><category></category></item><item><title><![CDATA[建造者模式]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/105016311</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/105016311</guid><author>itccccc</author><pubDate>Sun, 22 Mar 2020 10:13:47 +0800</pubDate><description><![CDATA[建造者模式它将客户端与包含多个组成部分（或部件）的复杂对象的创建过程分离，客户端无须知道复杂对象的内部组成与装配方式，只需要知道所需的建造者类即可。建造者模式关注如何一步一步地创建一个复杂对象，不同地具体建造者定义了不同地创建过程，且具体建造者之间相互独立，增加新的建造者非常方便，无须修改已有代码，系统具有较好地扩展性。

建造者模式的定义如下：

建造者模式（Buidler Pattern）：将...]]></description><category></category></item><item><title><![CDATA[原型模式]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/104975318</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/104975318</guid><author>itccccc</author><pubDate>Thu, 19 Mar 2020 20:56:50 +0800</pubDate><description><![CDATA[在设计模式中存在一种模式，可以通过一个原型对象克隆出多个一模一样的对象，该模式称之为原型模式。

原型模式的定义如下：

原型模式（Prototype Pattern）：使用原型实例指定创建对象的种类，并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。

在使用原型模式时，需要首先创建一个原型对象，再通过复制这个原型对象来创建更多同类型的对象。

原型模式的工作原理很简单：将一个原型...]]></description><category></category></item><item><title><![CDATA[关于Java线程Thread类的join方法的解释]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/104961628</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/104961628</guid><author>itccccc</author><pubDate>Thu, 19 Mar 2020 12:31:23 +0800</pubDate><description><![CDATA[Thread类的join方法，Java官方文档的解释是：Waits for this thread to die.（等待线程死亡）。也就是程序会等待调用join方法的线程运行完，再执行当前线程，但不影响除这2个线程之外的线程的运行。这样简单的解释可能很多同学并不是很理解，下面将详细地解释一些join方法。

首先我们先看一下join方法的代码实现（JDK8）：


public final voi...]]></description><category></category></item><item><title><![CDATA[抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/104937542</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/104937542</guid><author>itccccc</author><pubDate>Wed, 18 Mar 2020 10:30:45 +0800</pubDate><description><![CDATA[工厂方法模式通过引入工厂等级结构，解决了简单工厂模式中工厂类职责太重的问题，但由于工厂方法模式中的每个工厂只生产一类产品，可能会导致系统中存在大量的工厂类，势必会增加系统的开销。此时可以考虑将一些相关的产品组成一个“产品族”，由同一个工厂来统一生产，这就是抽象工厂模式的基本思想。

首先我们先来学习一些产品等级结构和产品族这两个概念。

1.产品等级结构：产品等级结构即产品的继承结构，例如一...]]></description><category></category></item><item><title><![CDATA[工厂方法模式]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/104899352</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/104899352</guid><author>itccccc</author><pubDate>Mon, 16 Mar 2020 15:36:36 +0800</pubDate><description><![CDATA[简单工厂模式虽然简单，但是存在一个很严重的问题：当系统中需要引入新产品时，由于工厂类的静态工厂方法通过传入的参数的不同来创建不同的产品，这必定要修改工厂类的源代码，这就违背了开闭原则。此外，在简单工厂模式中，所有的产品都由同一个工厂创建，工厂类的职责较重，业务逻辑较为复杂，具体产品与工厂类之间的耦合度较高，严重影响了系统的灵活性和扩展性。

如何实现在增加新产品时不影响已有的代码？工厂方法模式为此...]]></description><category></category></item><item><title><![CDATA[简单工厂模式（静态工厂方法模式）]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/104882123</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/104882123</guid><author>itccccc</author><pubDate>Sun, 15 Mar 2020 17:50:31 +0800</pubDate><description><![CDATA[定义：

简单工厂模式（Simple Factory Pattern）：定义一个工厂类，它可以根据参数的不同返回不同的实例，被创建的实例通常都具有相同的父类。因为在简单工厂模式中用于创建实例的方法是静态（static）方法，因此简单工厂模式又被称为静态工厂方法（Static Factory Method）模式，它属于类创建型模式。

严格来讲，简单工厂模式并不属于23中设计模式，但是它在软件设计和...]]></description><category></category></item><item><title><![CDATA[单例模式]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/104856381</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/104856381</guid><author>itccccc</author><pubDate>Sat, 14 Mar 2020 11:45:27 +0800</pubDate><description><![CDATA[单例模式是常用的设计模式之一，其定义如下：

单例模式（Singleton Pattern）：确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例，这个类称为单例类，它提供全局访问的方法。单例模式是一种对象创建型模式。

单例模式有3个要点：

1.某个类只能有一个实例；

2.它必须自行创建这个实例；

3.它必须自行向整个系统提供这个实例。

单例模式的UML类图如下：



单例...]]></description><category></category></item><item><title><![CDATA[单链表的反转]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/85051117</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/85051117</guid><author>itccccc</author><pubDate>Mon, 17 Dec 2018 16:18:06 +0800</pubDate><description><![CDATA[单链表的反转，思路就是从头节点循环遍历原链表，把原链表每个结点指向后继的指针，改为执行结点的前驱即可，C语言代码如下:


struct ListNode {
     int val;
     struct ListNode *next;
};

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode*...]]></description><category></category></item><item><title><![CDATA[关于Tomcat的server.xml中虚拟主机（Host）和Web应用程序（Context）配置的简要说明]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/80515789</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/80515789</guid><author>itccccc</author><pubDate>Wed, 30 May 2018 20:51:00 +0800</pubDate><description><![CDATA[       首先介绍一下虚拟主机的概念：       虚拟主机（Virtual Hosting）是一种可以让一个Web服务器服务于多个域名的机制，但在不同的域名看来好像是多个不同的服务器提供服务。一般的在Tomcat的server.xml中简单配置虚拟主机的方法如下：&amp;lt;Host name=&quot;www.xxx.com&quot;  appBase=&quot;webapps&quot;&amp;gt;
    &amp;lt;Contex...]]></description><category></category></item><item><title><![CDATA[MySQL设置多列为唯一约束,即多列不能同时相同]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/77771720</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/77771720</guid><author>itccccc</author><pubDate>Fri, 01 Sep 2017 13:14:21 +0800</pubDate><description><![CDATA[假设有一个需求是用户给评论点赞,数据库设计是三张表,用户表t_user,评论表t_comment,点赞表t_praise,其中点赞表中有两个外键分别是user_id和comment_id,分别关联用户表的用户id和评论表的评论id,然后规定一个用户只能给同一条评论点赞一次,有一种实现方式就是在插入点赞表之前,先通过user_id和comment_id查询是否有点赞记录,如果没有的话,再执行插入操作]]></description><category></category></item><item><title><![CDATA[Java中的接口]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/53331548</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/53331548</guid><author>itccccc</author><pubDate>Fri, 25 Nov 2016 10:38:41 +0800</pubDate><description><![CDATA[1.接口的概念
Java中接口是一种特殊的抽象类,与一般的抽象类相比,接口中的所有方法都是抽象的,接口中的所有属性都是常量.
2.接口的作用
接口通常用来定义类的行为(或者说特性或外观),但是具体的实现类除了实现接口定义的功能外,还可以根据需要实现一些其他功能,这是允许的,也就是说实现类的功能包含但不限于接口定义的功能.
3.接口的思想
封装隔离
这里的封装是指"对被隔离体的行为的封装]]></description><category></category></item><item><title><![CDATA[什么时候数组和指针相同]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/52640359</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/52640359</guid><author>itccccc</author><pubDate>Fri, 23 Sep 2016 17:17:44 +0800</pubDate><description><![CDATA[声明或定义:
声明:extern char a[];
不能改写成指针的形式
定义:char a[10]; 不能改写成指针的形式
函数参数:func(char a[]);
可以选择数组形式或指针形式
在表达式中使用:
c = a[i]; 可以选择数组形式或指针形式


但是,数组和指针在编译器处理时是不同的,在运行时的表示形式也是不一样的,并可能产生不同的代码.对编译器而言,一个]]></description><category></category></item><item><title><![CDATA[STM32位带操作(bit_band)位带区字节的位所对应的位带别名区地址计算公式的解释]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/52572942</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/52572942</guid><author>itccccc</author><pubDate>Sun, 18 Sep 2016 12:57:20 +0800</pubDate><description><![CDATA[STM32可以通过位带操作实现像51单片机一样单独访问某些寄存器的某一位.其原理就是把在位带区中的每一位膨胀到32位映射到位带别名区.STM32分别有2个1MB大小的位带区,分别为外设和SRAM,所以映射到位带别名区的大小就有32M.
知道了所要操作位带区的地址和其中某一位,可以通过下面的公式计算对于位带别名区的地址,然后通过操作这个地址的最低位(LSB)就实现了对相应位带区某一位的操作了.
]]></description><category></category></item><item><title><![CDATA[C语言中的getchar()和EOF]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/51822563</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/51822563</guid><author>itccccc</author><pubDate>Mon, 04 Jul 2016 17:50:00 +0800</pubDate><description><![CDATA[在C语言的字符处理程序中,经常会用到一个字符输入函数getchar(),此函数的说明中说函数是以字符为单位读取的,但实际情况是读到一个换行符或者是文件结束符EOF时才进行一次输出,对这个问题的一个解释是，在大师编写C的时候，当时并没有所谓终端输入的概念，所有的输入实际上都是按照文件进行读取的，文件中一般都是以行为单位的。因 此，只有遇到换行符，那么程序会认为输入结束，然后采取执行程序的其他部分。同]]></description><category></category></item><item><title><![CDATA[Android任务和返回栈完全解析，细数那些你所不知道的细节]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/50521562</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/50521562</guid><author>itccccc</author><pubDate>Fri, 15 Jan 2016 09:17:19 +0800</pubDate><description><![CDATA[转载请注明出处：http://blog.youkuaiyun.com/guolin_blog/article/details/41087993

本篇文章主要内容来自于Android Doc，我翻译之后又做了些加工，英文好的朋友也可以直接去读原文。


http://developer.android.com/guide/components/tasks-and-back-stack.html
]]></description><category></category></item><item><title><![CDATA[Handler引起的内存泄露问题]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/47811671</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/47811671</guid><author>itccccc</author><pubDate>Thu, 20 Aug 2015 17:55:55 +0800</pubDate><description><![CDATA[如果你在Activity中定义了一个内部Handler类，如下代码：

public class MainActivity extends Activity {
 
    private  Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
]]></description><category></category></item><item><title><![CDATA[STM32外部中断无法触发的问题]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/46608539</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/46608539</guid><author>itccccc</author><pubDate>Tue, 23 Jun 2015 17:57:23 +0800</pubDate><description><![CDATA[很多教程在讲解外部中断时，基本上都将接受外部中断的GPIO设置为浮空输入，即GPIO_Mode_IN_FLOATING，这样的话对应的GPIO会是低电平状态，如果外部不加上拉电阻的话，STM32无法响应外部的下降沿中断。为了简化硬件设计（不加外部上拉电阻），建议设置对应的GPIO为外部上拉输入，即GPIO_Mode_IPU，这样GPIO默认电平为高，STM32就可以正常响应外部的下降沿中断了。]]></description><category></category></item><item><title><![CDATA[STM32外部中断]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/46485123</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/46485123</guid><author>itccccc</author><pubDate>Sat, 13 Jun 2015 22:00:34 +0800</pubDate><description><![CDATA[中断是嵌入式系统中一个非常重要的概念，同时也在嵌入式系统中发挥着巨大的作用。在普通51单片机中，一共只有5个中断，其中2个外部中断，2个定时/计数器中断和一个串口中断。但在STM32中，中断的数量大大增加，同时配置和使用也相对复杂。此篇文章主要讲解STM32外部中断的配置和使用。
一、STM中断系统
首先介绍一下STM32中断系统的核心，即NVIC（Nested Vectored Interr]]></description><category></category></item><item><title><![CDATA[STM32 GPIO配置]]></title><link>https://blog.youkuaiyun.com/itccccc/article/details/46460455</link><guid>https://blog.youkuaiyun.com/itccccc/article/details/46460455</guid><author>itccccc</author><pubDate>Thu, 11 Jun 2015 17:56:34 +0800</pubDate><description><![CDATA[51单片机的I/O口功能相对较少，配置也相对简单，而STM32的I/O口功能则非常强大，配置也稍微复杂一些。
STM32的I/O口简称GPIO（即General Purpose Input Output，通用输入/输出端口），其配置的过程大致如下：
1、首先定义GPIO的初始化类型结构体：GPIO_InitTypeDef GPIO_InitStructure;此结构体的定义是在stm32f10]]></description><category></category></item></channel></rss>