<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[断翼天使]]></title><description><![CDATA[从这里，我开始慢慢成长。。。。。。]]></description><link>https://blog.youkuaiyun.com/wangbaoyin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wangbaoyin]]></copyright><item><title><![CDATA[MySQL explain详解]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/114983721</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/114983721</guid><author>wangbaoyin</author><pubDate>Thu, 18 Mar 2021 18:12:28 +0800</pubDate><description><![CDATA[MySQL中的explain命令显示了mysql如何使用索引来处理select语句以及连接表。

explain显示的信息可以帮助选择更好的索引和写出更优化的查询语句。


一、格式

explain + select 语句；

例如：explain select * from tb_student;

二、5.5和5.7版本explain的区别

5.7之后的版本默认会有 partitions 和 filtered两列，但是5.5版本中是没有的，需要

使用explain partitions sele.]]></description><category></category></item><item><title><![CDATA[图解悲观锁和乐观锁]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/114934565</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/114934565</guid><author>wangbaoyin</author><pubDate>Wed, 17 Mar 2021 17:23:18 +0800</pubDate><description><![CDATA[这篇文章讲什么

这是一篇介绍悲观锁和乐观锁的入门文章。旨在让那些不了解悲观锁和乐观锁的小白们弄清楚什么是悲观锁，什么是乐观锁。不同于其他文章，本文会配上相应的图解让大家更容易理解。通过该文，你会学习到如下的知识



	什么是悲观锁，什么是乐观锁。
	
	
	怎么实现悲观锁，怎么实现乐观锁
	
	
	悲观锁和乐观锁的优缺点
	
	
	悲观锁和乐观锁的应用场景
	


一、什么是悲观锁，什么是乐观锁


	锁（Lock）:
	在介绍悲观锁和乐观锁之前，让我们看一下锁。锁，在我们生活中随处可见，我们的门上有锁]]></description><category></category></item><item><title><![CDATA[Spring、SpringMVC、SpringBoot的关系]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/114932008</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/114932008</guid><author>wangbaoyin</author><pubDate>Wed, 17 Mar 2021 15:19:51 +0800</pubDate><description><![CDATA[一、概念

1、Spring

Spring是一个开源容器框架，可以接管web层，业务层，dao层，持久层的组件，并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。

2、SpringMVC

Spring MVC属于SpringFrameWork的后续产品，已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架，用于替代servlet（处理|响应）请求，获取表单参数，表单]]></description><category></category></item><item><title><![CDATA[前端架构模式MVVM及数据双向绑定原理]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/114328641</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/114328641</guid><author>wangbaoyin</author><pubDate>Thu, 04 Mar 2021 18:14:01 +0800</pubDate><description><![CDATA[一、概述

     JS 几个流行的框架 Vuejs、AngularJS 都使用 MVVM 模式，该模式叫做视图模型双向数据绑定，以达到数据和视图快速同步的目的。

     主要体现就是表单元素值变，JS变量值改变，若页面上有输出，输出值也改变，典型的代码如下


&lt;div id="app"&gt;
  &lt;p&gt;{{ message }}&lt;/p&gt;
  &lt;input v-model="message"&gt;
&lt;/div&gt;
new Vu...]]></description><category></category></item><item><title><![CDATA[getUserMedia API及HTML5 调用摄像头和麦克风]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/111589747</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/111589747</guid><author>wangbaoyin</author><pubDate>Wed, 23 Dec 2020 14:41:05 +0800</pubDate><description><![CDATA[getUserMedia API简介

HTML5的getUserMedia API为用户提供访问硬件设备媒体（摄像头、视频、音频、地理位置等）的接口，基于该接口，开发者可以在不依赖任何浏览器插件的条件下访问硬件媒体设备。
getUserMedia API最初是navigator.getUserMedia，目前已被最新Web标准废除，变更为navigator.mediaDevices.getUserMedia（），但浏览器支持情况不如旧版API普及。MediaDevices.getUserMedia（）..]]></description><category></category></item><item><title><![CDATA[Spring mvc解决跨域请求：Response to preflight request doesn‘t pass access control check]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/110955167</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/110955167</guid><author>wangbaoyin</author><pubDate>Thu, 10 Dec 2020 16:01:55 +0800</pubDate><description><![CDATA[在nginx跨域请求cors配置如下：


location / {
        add_header         'Access-Control-Allow-Origin' 'https://api.xxxx.com';
        add_header         "Access-Control-Allow-Credentials" "true";
        add_header         "Access-Control-Allow-Headers" "x-requested]]></description><category></category></item><item><title><![CDATA[Web Worker 使用教程]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/109159374</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/109159374</guid><author>wangbaoyin</author><pubDate>Mon, 19 Oct 2020 13:58:02 +0800</pubDate><description><![CDATA[一、概述

JavaScript 语言采用的是单线程模型，也就是说，所有任务只能在一个线程上完成，一次只能做一件事。前面的任务没做完，后面的任务只能等着。随着电脑计算能力的增强，尤其是多核 CPU 的出现，单线程带来很大的不便，无法充分发挥计算机的计算能力。



Web Worker 的作用，就是为 JavaScript 创造多线程环境，允许主线程创建 Worker 线程，将一些任务分配给后者运行。在主线程运行的同时，Worker 线程在后台运行，两者互不干扰。等到 Worker 线程完成计算任务，再把结]]></description><category></category></item><item><title><![CDATA[《投资最重要的事》（霍华德.马克斯）--读书会分享]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107446678</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107446678</guid><author>wangbaoyin</author><pubDate>Sun, 19 Jul 2020 16:44:47 +0800</pubDate><description><![CDATA[提炼书中精华：

要学会深层次思考，思考问题的时候不能只关注表面，要有因果导向
	控制风险能力，关注风险比关注收益更重要，投资的核心就是控制风险
组合投资是控制风险的好方法，投资组合中每个单品都要进行风险评估，而且一定不要以极小的比例投资自己看好的单品，投资前一定要考虑清楚自己所能承担的最大风险比例。

以价格为出发点坚持价值投资
两个常见的错误认知：

价值投资就是买优质的公司

选择潜力股一定就能赢得未来，（以趋势去判断未来很难，美国金融史科技泡沫破灭就是实例），不是说行业先进，代表未来发展趋势，公司就]]></description><category></category></item><item><title><![CDATA[synchronized在JDK1.6之后的改进及具体对象锁升级过程]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107446414</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107446414</guid><author>wangbaoyin</author><pubDate>Sun, 19 Jul 2020 15:56:33 +0800</pubDate><description><![CDATA[在java同步代码快中，synchronized的使用方式无非有两个:

通过对一个对象进行加锁来实现同步，如下面代码。

synchronized(lockObject){
    //代码
}

对一个方法进行synchronized声明，进而对一个方法进行加锁来实现同步。如下面代码

public synchornized void test(){
    //代码
}

但这里需要指出的是，无论是对一个对象进行加锁还是对一个方法进行加锁，实际上，都是对对象进行加锁。

也就是说，对于方式2，实际上虚]]></description><category></category></item><item><title><![CDATA[Java CAS底层实现原理实例详解]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107429305</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107429305</guid><author>wangbaoyin</author><pubDate>Sat, 18 Jul 2020 15:39:24 +0800</pubDate><description><![CDATA[一、CAS（compareAndSwap）的概念

CAS，全称Compare And Swap（比较与交换），解决多线程并行情况下使用锁造成性能损耗的一种机制。

CAS（V, A, B），V为内存地址、A为预期原值，B为新值。如果内存地址的值与预期原值相匹配，那么将该位置值更新为新值。否则，说明已经被其他线程更新，处理器不做任何操作；无论哪种情况，它都会在 CAS 指令之前返回该位置的值。而我们可以使用自旋锁，循环CAS，重新读取该变量再尝试再次修改该变量，也可以放弃操作。



二、CAS（compa]]></description><category></category></item><item><title><![CDATA[java中为什么要重写 hashcode 和 equals 方法？]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107358805</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107358805</guid><author>wangbaoyin</author><pubDate>Wed, 15 Jul 2020 14:31:43 +0800</pubDate><description><![CDATA[1. 通过Hash算法来了解HashMap对象的高效性

在一个长度为n（假设是10000）的线性表（假设是ArrayList）里，存放着无序的数字；如果我们要找一个指定的数字，就不得不通过从头到尾依次遍历来查找，这样的平均查找次数是n除以2（这里是5000）。

再来观察Hash表（这里的Hash表纯粹是数据结构上的概念，和Java无关）。它的平均查找次数接近于1，代价相当小，关键是在Hash表里，存放在其中的数据和它的存储位置是用Hash函数关联的。

假设一个Hash函数是x*x%5。当然实际情况不.]]></description><category></category></item><item><title><![CDATA[Java泛型类型擦除以及类型擦除带来的问题]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107341997</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107341997</guid><author>wangbaoyin</author><pubDate>Tue, 14 Jul 2020 17:01:22 +0800</pubDate><description><![CDATA[目录

1.Java泛型的实现方法：类型擦除

	1-2.通过两个例子证明Java类型的类型擦除

		例1.原始类型相等
			例2.通过反射添加其它类型元素
		
	
	2.类型擦除后保留的原始类型
	例3.原始类型Object
		例4.Object泛型
	
	3.类型擦除引起的问题及解决方法
	3-1.先检查，再编译以及编译的对象和引用传递问题
		3-2.自动类型转换
		3-3.类型擦除与多态的冲突和解决方法
		3-4.泛型类型变量不能是基本数据类型
		3-5.编译时集合的instan...]]></description><category></category></item><item><title><![CDATA[Requirejs data-main 多个页面指向同一个入口js]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107210407</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107210407</guid><author>wangbaoyin</author><pubDate>Wed, 08 Jul 2020 17:18:21 +0800</pubDate><description><![CDATA[&lt;script src="../static/js/lib/require.js" data-main="../static/js/script/main" id="moudle" moudle-name ="login"  defer async="true" &gt;&lt;/script&gt;


以上为页面中引入requirejs内容


require.config({
    baseUrl:"https://test.com",
    paths:{
        "jquery.]]></description><category></category></item><item><title><![CDATA[RequireJS - 入门指南、进阶使用详解]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107189782</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107189782</guid><author>wangbaoyin</author><pubDate>Tue, 07 Jul 2020 20:33:13 +0800</pubDate><description><![CDATA[一、AMD 规范

1，AMD 基本介绍

AMD全称为Asynchromous Module Definition（异步模块定义）
	AMD是RequireJS在推广过程中对模块定义的规范化产出，它是一个在浏览器端模块化开发的规范。
	AMD模式可以用于浏览器环境并且允许非同步加载模块，同时又能保证正确的顺序，也可以按需动态加载模块。


2，AMD 模块规范

AMD通过异步加载模块。模块加载不影响后面语句的运行。所有依赖某些模块的语句均放置在回调函数中。
	AMD规范只定义了...]]></description><category></category></item><item><title><![CDATA[dubbo入门]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107131032</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107131032</guid><author>wangbaoyin</author><pubDate>Sun, 05 Jul 2020 17:08:44 +0800</pubDate><description><![CDATA[dubbo产生的背景





单一应用架构

当网站流量很小时，只需一个应用，将所有功能都部署在一起，以减少部署节点和成本。此时，用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大，单一应用增加机器带来的加速度越来越小，提升效率的方法之一是将应用拆成互不相干的几个应用，以提升效率。此时，用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

当垂直应用越来越多，应用之间交互不可避免，将核心业务抽取出来，作为独立的服务，逐渐形成稳定的服务中心，使前端.]]></description><category></category></item><item><title><![CDATA[dubbo问题汇总]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107138418</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107138418</guid><author>wangbaoyin</author><pubDate>Sun, 05 Jul 2020 17:08:28 +0800</pubDate><description><![CDATA[1.dubbo是什么

dubbo是一个分布式，高性能，透明化的RPC服务框架，提供服务自动注册、自动发现等高效服务治理方案，可以和spring框架无缝集成。（RPC指的是远程过程调用，也就是说两个服务器交互数据）

2.dubbo主要应用场景

透明化的远程方法调用，就像调用本地方法一样调用远程方法，只需简单配置，没有任何API侵入

软负载均衡及容错机制，可在内网替代F5等硬件负载均衡器，降低成本，减少单点

服务自动注册与发现，不再需要写死服务提供方地址，注册中心基于接口名查询服务提供者的IP地址，并]]></description><category></category></item><item><title><![CDATA[nginx静态html页面接收post请求，报405 not allowed错误解决办法]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107102037</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107102037</guid><author>wangbaoyin</author><pubDate>Fri, 03 Jul 2020 11:25:50 +0800</pubDate><description><![CDATA[修改nginx.conf配置文件，在server{}中添加error_page 405=200@405


]]></description><category></category></item><item><title><![CDATA[windows下用nginx配置https服务器]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/107099417</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/107099417</guid><author>wangbaoyin</author><pubDate>Fri, 03 Jul 2020 09:53:18 +0800</pubDate><description><![CDATA[windows下用nginx配置https服务器

1.安装nginx

先到nginx官网下在nginxhttp://nginx.org/en/download.html


将下载好的文件解压出来修改文件名为 nginx ,然后拷贝到C盘下，目录如下：


运行 nginx

start nginx


验证

在浏览器中输入 localhost 访问即可，如出现以下页面，即安装成功




2.安装 OpenSSL


	下载OpenSSLhttp://slproweb.com/products/..]]></description><category></category></item><item><title><![CDATA[防止网页被嵌入框架iframe的js代码]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/53471105</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/53471105</guid><author>wangbaoyin</author><pubDate>Mon, 05 Dec 2016 22:38:33 +0800</pubDate><description><![CDATA[if (window!=top) // 判断当前的window对象是否是top对象
 top.location.href =window.location.href; // 如果不是，将top对象的网址自动导向被嵌入网页的网址]]></description><category></category></item><item><title><![CDATA[Java中的字符串常量池详细介绍]]></title><link>https://blog.youkuaiyun.com/wangbaoyin/article/details/53207874</link><guid>https://blog.youkuaiyun.com/wangbaoyin/article/details/53207874</guid><author>wangbaoyin</author><pubDate>Thu, 17 Nov 2016 22:31:57 +0800</pubDate><description><![CDATA[这篇文章主要介绍了Java中的字符串常量池详细介绍,JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池,需要的朋友可以参考下



Java中字符串对象创建有两种形式，一种为字面量形式，如String str = "droid";，另一种就是使用new这种标准的构造对象的方法，如String str = new String("droi]]></description><category></category></item></channel></rss>