<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[gol_phing的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/gol_phing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; gol_phing]]></copyright><item><title><![CDATA[发糖果问题]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/116021615</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/116021615</guid><author>gol_phing</author><pubDate>Thu, 22 Apr 2021 17:08:27 +0800</pubDate><description><![CDATA[老师想给孩子们分发糖果，有 N个孩子站成了一条直线，老师会根据每个孩子的表现，预先给他们评分。

你需要按照以下要求，帮助老师给这些孩子分发糖果：

每个孩子至少分配到 1 个糖果。
评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。
那么这样下来，老师至少需要准备多少颗糖果呢？

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/candy
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。



https://leetcod..]]></description><category></category></item><item><title><![CDATA[mysql insert 隐式锁的问题分析]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102747332</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102747332</guid><author>gol_phing</author><pubDate>Fri, 25 Oct 2019 17:44:45 +0800</pubDate><description><![CDATA[1、什么是隐式锁？

隐式锁是一种乐观锁，只在必要的时候加锁。比如insert的时候，默认是不会加锁的，InnoDB的每条记录中都一个隐含的trx_id字段，这个字段存在于聚簇索引的B+Tree中。插入后会保存当前事务ID。如果后面有其他事务要对这个记录加排他锁时，将由这个事务将这个记录增加前面一个事物的显示锁。





2、insert如何加锁？

insert加隐式锁，也就是在主键索引里...]]></description><category></category></item><item><title><![CDATA[索引失效场景]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102747323</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102747323</guid><author>gol_phing</author><pubDate>Fri, 25 Oct 2019 17:43:12 +0800</pubDate><description><![CDATA[1、B-Tree可以对&lt;，&lt;=，=，&gt;，&gt;=，BETWEEN，IN，以及不以通配符开始的LIKE使用索引。

2、存储引擎不能使用索引中范围条件右边的列。例如，如果你的查询语句为WHERE last_name="Smith" AND first_name LIKE 'J%' AND dob='1976-12-23'，则该查询只会使用索引中的前两列，因为LIKE是范围查询。
...]]></description><category></category></item><item><title><![CDATA[事务隔离级别实现原理和锁-InnoDB存储引擎]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102747292</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102747292</guid><author>gol_phing</author><pubDate>Fri, 25 Oct 2019 17:42:26 +0800</pubDate><description><![CDATA[1、隔离级别的种类

RU：未提交读

RC：读提交

RR：可重复读 （默认）

Series:串行化



2、锁的种类

行锁，gap lock, next-key lock

共享锁，排他锁，意向共享锁，意向排他锁,插入意向锁



意向锁（插入意向锁不包括）之间互相兼容，可以说意向锁就是为了提高锁判断的效率的。两个事务都对同一个表加意向排他锁，也就是两个事务都是修改数据，那么底层的行...]]></description><category></category></item><item><title><![CDATA[where 条件加锁分析]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102747257</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102747257</guid><author>gol_phing</author><pubDate>Fri, 25 Oct 2019 17:40:35 +0800</pubDate><description><![CDATA[本文前提

where提取

Index key

Index Filter

Table Filter

有什么用？

参考文章



本文前提

基于InnoDB存储引擎
	当前读






where提取

提取为三部分：Index Key, Index Filter, Table Filter

Index key

Index First Key:

用于确定索引查询的起始...]]></description><category></category></item><item><title><![CDATA[Myisam和InnoDB的区别]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102747224</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102747224</guid><author>gol_phing</author><pubDate>Fri, 25 Oct 2019 17:38:31 +0800</pubDate><description><![CDATA[不同点：


InnoDB 支持事务，MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一；


InnoDB 支持外键，而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败；


InnoDB 是聚集索引，MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上，因此 InnoDB 必须要有主...]]></description><category></category></item><item><title><![CDATA[mysql自增主键的锁问题]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102747167</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102747167</guid><author>gol_phing</author><pubDate>Fri, 25 Oct 2019 17:35:45 +0800</pubDate><description><![CDATA[每个带有自增属性的表都有一个隐式计数器来维护自增ID到了什么值。在插入的时侯通过加表锁来更新这个计数器。插入完成后就释放，并不是等到事务结束。但是这严重影响了程序的并发性，尤其是在执行insert .... select的时候会阻塞其他事务的插入。



所以mysql 5.1.22进行了优化，对于确定数量的插入simple inserts通过互斥量来做到的。

MySQL 5.1.22开始，I...]]></description><category></category></item><item><title><![CDATA[TCP粘包和常用解决方案]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/102395777</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/102395777</guid><author>gol_phing</author><pubDate>Tue, 08 Oct 2019 16:55:09 +0800</pubDate><description><![CDATA[0、现象

1、产生的原因
根因：无消息保护边界。面向流的。
具体原因：
1、nagle算法
为了提高发送效率
2、mtu限制
数据链路层限制，导致发送端拆包
3、recvbuf
接收端缓冲区。或者进程处理不及时会导致粘包
2、解决的办法
1、固定长度
2、固定分隔符
3、头＋body，头部包含data长度
参考文章：
https://blog.youkuaiyun.com/u013857458/articl...]]></description><category></category></item><item><title><![CDATA[epoll poll select区别]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/90273732</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/90273732</guid><author>gol_phing</author><pubDate>Thu, 16 May 2019 22:34:26 +0800</pubDate><description><![CDATA[select :

1.每次调用 select()，都需要把 fd 集合从用户态拷贝到内核态，这个开销在 fd 很多时会很大，同时每次调用 select() 都需要在内核遍历传递进来的所有 fd，这个开销在 fd 很多时也很大。

2.单个进程能够监视的文件描述符的数量存在最大限制，在 Linux 上一般为 1024，可以通过修改宏定义甚至重新编译内核的方式提升这一限制，但是这样也会造成效率的降低...]]></description><category></category></item><item><title><![CDATA[n人围成一圈报数]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/90211320</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/90211320</guid><author>gol_phing</author><pubDate>Tue, 14 May 2019 17:34:45 +0800</pubDate><description><![CDATA[题目：有n个人围成一圈，顺序排号。从第一个人开始报数（从1到3报数），凡报到3的人退出圈子，问最后留下的是原来的第几号的那位






import java.util.LinkedList;
import java.util.List;

/**
 * @author Golphing.W
 * @date 19/5/14 下午3:08
 */
public class Test {
  ...]]></description><category></category></item><item><title><![CDATA[nginx location匹配顺序]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/51944138</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/51944138</guid><author>gol_phing</author><pubDate>Mon, 18 Jul 2016 18:53:17 +0800</pubDate><description><![CDATA[location:


语法:location [=|~|~*|^~] /uri/

如果使用正则表达式，你必须使用 ~* 前缀选择不区分大小写的匹配或者 ~ 选择区分大小写的匹配。

使用正则表达式必须使用这个前缀
如果使用的是普通字符串匹配则不需要
使用 “=”前缀，将只执行严格匹配。如果这个查询匹配，那么将停止搜索并立即处理这个请求。

总结，指令按下列顺序被接受:
]]></description><category></category></item><item><title><![CDATA[Spring 包自动扫描]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/51680232</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/51680232</guid><author>gol_phing</author><pubDate>Wed, 15 Jun 2016 12:03:37 +0800</pubDate><description><![CDATA[需要配置 
配置其实配置的是注解解释器。这个解释器也会解释@Resource等注解，所以不需要再去配置那个注解解释器了]]></description><category></category></item><item><title><![CDATA[Spring DI]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/51678451</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/51678451</guid><author>gol_phing</author><pubDate>Wed, 15 Jun 2016 08:49:02 +0800</pubDate><description><![CDATA[spring中有三种依赖注入的方式： 
 1、构造器注入 
 2、setter方法注入 
     主要是通过反射，调用setter方法将值注入进去 
 3、属性注入(注解的方式)属性注入 
需要增加命名空间， 
 
@Resource默认按名称装载，没有的时候按类型  名称就是字段名 
@Autowired默认按类型装载]]></description><category></category></item><item><title><![CDATA[getClass（）方法]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/51671694</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/51671694</guid><author>gol_phing</author><pubDate>Tue, 14 Jun 2016 14:46:34 +0800</pubDate><description><![CDATA[/**
 * @author hzwanggaoping
 * 统计
 */
public class sdfasf {
public static void main(String[] args) {
Person p = new Student();
System.out.println(p.getClass());
System.out.println(p.getClass(]]></description><category></category></item><item><title><![CDATA[关于java的多态方法调用顺序的问题]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/50774247</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/50774247</guid><author>gol_phing</author><pubDate>Tue, 01 Mar 2016 17:29:01 +0800</pubDate><description><![CDATA[使用父类类型的引用指向子类的对象，该引用调用的师父类中定义的方法和变量，变量不能被重写（覆盖）；如果子类中重写了父类中的一个方法，那么在调用这个方法的时候，将会调用子类中的这个方法；
         注意特殊情况，如果该父类引用所调用的方法参数列表未定义，就调用该父类的父类中查找，如果还没找到就强制向上类型转换参数列表中的参数类型，具体优先级高到低依次如下：
this.show(O)、sup]]></description><category></category></item><item><title><![CDATA[细聊分布式ID生成方法]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/50723415</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/50723415</guid><author>gol_phing</author><pubDate>Tue, 23 Feb 2016 15:16:03 +0800</pubDate><description><![CDATA[一、需求缘起

几乎所有的业务系统，都有生成一个记录标识的需求，例如：

（1）消息标识：message-id

（2）订单标识：order-id

（3）帖子标识：tiezi-id

这个记录标识往往就是数据库中的唯一主键，数据库上会建立聚集索引（cluster
 index），即在物理存储上以这个字段排序。

 

这个记录标识上的查询，往往又有分页或者排序的业务]]></description><category></category></item><item><title><![CDATA[java nio初探]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/50698581</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/50698581</guid><author>gol_phing</author><pubDate>Fri, 19 Feb 2016 16:15:21 +0800</pubDate><description><![CDATA[在讲java nio之前，先讲一下io模型，我也是刚刚在网上看的博客学习的，在这里总结一下，有理解不正确的地方，欢迎指正。
同步，异步，阻塞，非阻塞
首先讲一下我们经常听到的几个名词：同步，异步，阻塞，非阻塞
同步指的是有多个任务的时候，需要一件件的按顺序执行，不能穿插进行。异步就是可用同时进行。
阻塞指的是在做某件事情的时候，发现条件不足，但是线程会一直等待直到满足条件。而非阻塞则是在条]]></description><category></category></item><item><title><![CDATA[关于gitignore文件，Myeclipse和IDEA的编译输出文件的问题]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/49331845</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/49331845</guid><author>gol_phing</author><pubDate>Thu, 22 Oct 2015 15:17:24 +0800</pubDate><description><![CDATA[使用git做版本管理时，有的.class文件非常繁琐，比如你创建了一个工程，用git做版本管理，每次的class文件内容都不一样啊，这个东西又没有什么必要管理，还有，多人协作开发时用的IDE不一样的时候，一些IDE的配置文件，这些都不希望上传到版本库，这时，gitignore文件就起作用啦，比如：我的gitignore文件内容如下：

# Maven
target/
*.ser
*.ec

#]]></description><category></category></item><item><title><![CDATA[整理下git常用命令]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/49329035</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/49329035</guid><author>gol_phing</author><pubDate>Thu, 22 Oct 2015 09:23:22 +0800</pubDate><description><![CDATA[git status -s
git branch
git pull
git add .
git commit -m “msg”
git checkout branchname
git merge brachname
git log --pretty=oneline
版本回退：git reset --hard HEAD^    内容也是要回退的
    git reset --ha]]></description><category></category></item><item><title><![CDATA[线程池原理(讲的非常棒)]]></title><link>https://blog.youkuaiyun.com/gol_phing/article/details/49032055</link><guid>https://blog.youkuaiyun.com/gol_phing/article/details/49032055</guid><author>gol_phing</author><pubDate>Sat, 10 Oct 2015 23:01:21 +0800</pubDate><description><![CDATA[Java并发编程：线程池的使用

　　在前面的文章中，我们使用线程的时候就去创建一个线程，这样实现起来非常简便，但是就会有一个问题：

　　如果并发的线程数量很多，并且每个线程都是执行一个时间很短的任务就结束了，这样频繁创建线程就会大大降低系统的效率，因为频繁创建线程和销毁线程需要时间。

　　那么有没有一种办法使得线程可以复用，就是执行完一个任务，并不被销毁，而是可以继续执行其他的任]]></description><category></category></item></channel></rss>