<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[核桃的博客——JavaWeb技术分享]]></title><description><![CDATA[Java笔记]]></description><link>https://blog.youkuaiyun.com/chen1280436393</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chen1280436393]]></copyright><item><title><![CDATA[线程池的种类，区别和使用场景]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/104849572</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/104849572</guid><author>chen1280436393</author><pubDate>Fri, 13 Mar 2020 21:21:07 +0800</pubDate><description><![CDATA[newCachedThreadPool：


public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
  ...]]></description><category></category></item><item><title><![CDATA[elasticsearch query 查询总结！！！]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/101112638</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/101112638</guid><author>chen1280436393</author><pubDate>Sat, 21 Sep 2019 18:06:19 +0800</pubDate><description><![CDATA[GET /index_name/_search
{
  "query": {
    "term": {
      "from.keyword": {
        "value": "我的"
      }
    }
  }
}

GET /index_name/_search
{
  "query": {
    "bool": {
      "must": [
        {
...]]></description><category></category></item><item><title><![CDATA[获取上一个自然周的、上一个自然月的起始时间范围]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/100713539</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/100713539</guid><author>chen1280436393</author><pubDate>Tue, 10 Sep 2019 21:36:39 +0800</pubDate><description><![CDATA[一般统计经常用的时间范围，在此提供两个经常用到，时间范围取每个月一号零时至下月一号零时之间
例如：当前日期是 20190910  20190801 00:00:00 —— 20190901 00:00:00

 public static List&lt;Date&gt; getLastMonth(){
        Calendar calendar = Calendar.getInstan...]]></description><category></category></item><item><title><![CDATA[微信小程序登录授权、获取用户敏感信息、解密手机号，javax.crypto.IllegalBlockSizeException: last block incomplete in decryption]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/97016746</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/97016746</guid><author>chen1280436393</author><pubDate>Tue, 23 Jul 2019 18:14:49 +0800</pubDate><description><![CDATA[//小程序的key和秘钥
    private final String wechatAppId = "";
    private final String wechatSecretKey = " ";
    private final String grantType = "authorization_code";
    //根据微信登录返回的code获取解密的key的接口
 ...]]></description><category></category></item><item><title><![CDATA[在MySQL中阻止UPDATE语句没有添加WHERE条件的发生]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/96436572</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/96436572</guid><author>chen1280436393</author><pubDate>Thu, 18 Jul 2019 16:51:53 +0800</pubDate><description><![CDATA[如果在生产环境中使用UPDATE语句更新表数据，此时如果忘记携带本应该添加的WHERE条件，那么。。Oh,no…后果可能不堪设想。那么有没有什么办法可以阻止这样的事情发生，又不使用任何的审核工具呢。。。办法当然是有的

sql_safe_updates

sql_safe_updates这个MySQL自带的参数就可以完美的解决我们的问题，并且该参数是可以在线变更的哦~当该参数开启的情况下，你必须要...]]></description><category></category></item><item><title><![CDATA[java实现redis分布式锁，已经过实际线上环境测试]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/95500406</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/95500406</guid><author>chen1280436393</author><pubDate>Thu, 11 Jul 2019 18:07:41 +0800</pubDate><description><![CDATA[这两天重构之前的项目线上测试，发现线程池总是很快就满了，打印了线程池日志，发现报错提示数据库死锁，查看数据库日志定位到具体的sql和数据表，发现该表有五个地方修改，纠结之下暂时放弃了事务处理；然后上线，运行一段时间后仍然是会有部分线程长时间获取不到锁。仔细分析设计到这部分的代码，包括锁的实现，并简单修改了下，上线后未出现问题。

今天打算重新整理下，偶然实现之前的代码和网上的部分博客完全一样！！！...]]></description><category></category></item><item><title><![CDATA[java采用三方工具包自动判断文件编码    两种方式]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/94400685</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/94400685</guid><author>chen1280436393</author><pubDate>Mon, 01 Jul 2019 18:04:52 +0800</pubDate><description><![CDATA[第一种我试过了不是很准，网上有人说是通过统计概率判断文件编码的再此处记录，

UTF8的CSV文件

用wps打开修改后保存，再用notepad打开显示为GB2312，该方法读取的编码格式为 UTF-16BE，按此格式读取文件出现乱码；

用excel2013打开修改后保存，再用notepad打开，看见格式仍然是GB2312，该方法判断文件编码格式为Big5，按此格式读取文件出现乱码；

jar包...]]></description><category></category></item><item><title><![CDATA[idea 自动注释 param   return]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/93531296</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/93531296</guid><author>chen1280436393</author><pubDate>Mon, 24 Jun 2019 21:57:24 +0800</pubDate><description><![CDATA[类注释很简单，网上教程也很多，在此仅截图记录下




#if (${PACKAGE_NAME} &amp;&amp; ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
/**
* @description: ${description}
*
* @author: hetao
*
* @create: ${YEAR}-${MONTH}-${DAY...]]></description><category></category></item><item><title><![CDATA[阿里云OCR接口前端 js ajax 调用（ocrEcommerce）无阿里云图片服务器直接将图片转为base64字符串]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/93503372</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/93503372</guid><author>chen1280436393</author><pubDate>Mon, 24 Jun 2019 17:42:34 +0800</pubDate><description><![CDATA[ajax接口调用


function ocrutil1(img64){
    obj = { img: img64, prob: false},
    $.ajax({
        url: "https://ocrapi-ecommerce.taobao.com/ocrservice/ecommerce",
        type: "post",
        async: fa...]]></description><category></category></item><item><title><![CDATA[多层for循环中空指针问题排查和思考]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/90721846</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/90721846</guid><author>chen1280436393</author><pubDate>Fri, 31 May 2019 19:47:05 +0800</pubDate><description><![CDATA[首先说下问题出现的背景，最近重构公司老项目

老项目：spring+hibernate+dubbo+ehcache+mysql

新项目：springboot+myBatis+dubbo+redis+mysql

该项目完全是向外提供dubbo服务，因为没有页面，通过telnet测试dubbo接口；

测试接口的时候，发现空指针问题，指向一个三目运算符，肉眼看半天没有找到问题，于是catch异常顺...]]></description><category></category></item><item><title><![CDATA[MySQL 优化之 Covering Index]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/88558345</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/88558345</guid><author>chen1280436393</author><pubDate>Thu, 14 Mar 2019 18:12:30 +0800</pubDate><description><![CDATA[在网上随便搜搜，就能找到大把的关于 MySQL 优化的文章，不过里面很多都不准确，说个常见的：


			
SELECT a FROM ... WHERE b = ...

			
		一般来说，很多文章会告诫你类似这样的查询，不要在 “a” 字段上建立索引，而应该在 “b” 上建立索引。这样做确实不错，但是很多时候这并不是最佳结果。为什么这样说？这还得先从索引来说起。



索引

MySQL ...]]></description><category></category></item><item><title><![CDATA[mysql 聚集索引 非聚集索引]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/88248890</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/88248890</guid><author>chen1280436393</author><pubDate>Wed, 06 Mar 2019 18:43:56 +0800</pubDate><description><![CDATA[聚集索引

索引是存储了表数据的物理地址

聚集索引既存储了表数据key又存储了行值，物理地址的逻辑顺序和表存储的顺序一致！是唯一的

对于Innodb，主键毫无疑问是一个聚集索引。但是当一个表没有主键，或者没有一个索引，Innodb会如何处理呢。请看如下规则 如果一个主键被定义了，那么这个主键就是作为聚集索引 如果没有主键被定义，那么该表的第一个唯一非空索引被作为聚集索引 如果没有主键也没有合适...]]></description><category></category></item><item><title><![CDATA[volatile 底层实现  简要说明]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/88233024</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/88233024</guid><author>chen1280436393</author><pubDate>Wed, 06 Mar 2019 13:58:46 +0800</pubDate><description><![CDATA[当多个线程进行操作共享数据时，可以保证内存中的数据可见。其原理是它调用了计算机底层代码叫内存栅栏，它时时刻刻把缓存当中的数据刷新到主存当中，可以理解为它的操作就是在主存当中完成的。使用了Volatile关键字后效率也会相对低一些，因为JVM底层有个优化重排序，如果使用了Volatile关键字修饰后不能重排序了


...]]></description><category></category></item><item><title><![CDATA[spring事物介绍]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/87536515</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/87536515</guid><author>chen1280436393</author><pubDate>Sun, 17 Feb 2019 15:35:11 +0800</pubDate><description><![CDATA[一、事务的基本原理
Spring事务 的本质其实就是数据库对事务的支持，没有数据库的事务支持，spring是无法提供事务功能的。对于纯JDBC操作数据库，想要用到事务，可以按照以下步骤进行：
    获取连接 Connection con = DriverManager.getConnection()
    开启事务con.setAutoCommit(true/false);
    执行CRU...]]></description><category></category></item><item><title><![CDATA[spring启动过程---简单概述--有错误望指出]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/87463980</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/87463980</guid><author>chen1280436393</author><pubDate>Sat, 16 Feb 2019 18:42:38 +0800</pubDate><description><![CDATA[web容器的初始化过程为

web容器（如tomcat）读取web.xml, 读取文件中两个节点和
	容器创建ServletContext，它是web的上下文，整个web项目都会用到它
	读取context-param节点，它以 键值对的形式出现。将节点值转化为键值对，传给ServletContext
	容器创建中的实例，创建监听器。监听器必须继承ServletContextListener
	调...]]></description><category></category></item><item><title><![CDATA[mysql开发规范]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/85224403</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/85224403</guid><author>chen1280436393</author><pubDate>Sun, 23 Dec 2018 17:22:10 +0800</pubDate><description><![CDATA[1.避免使用NULL字段

NULL字段很难查询优化,NULL字段的索引需要额外空间,NULL字段的复合索引无效,

NULL非常影响索引的查询效率 建议用0,特殊值或空串代替NULL值

age int NOT NULL DEFAULT 0; name varchar(30) NOT NULL DEFAULT '';

在对该字段进行COUNT()统计时,统计结果更准确或者执行WHERE col...]]></description><category></category></item><item><title><![CDATA[mysql基本数据类型]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/85223343</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/85223343</guid><author>chen1280436393</author><pubDate>Sun, 23 Dec 2018 16:03:48 +0800</pubDate><description><![CDATA[一、int

      tinyint 1字节 -128 - 127 unsigned无符号 0-255

      smallint 2字节 -2^15 (-32,768) 到 2^15 - 1 (32,767) unsigned无符号0-65535

      int 4字节 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647)

     ...]]></description><category></category></item><item><title><![CDATA[mysql-优化-避免全表扫描]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/80493088</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/80493088</guid><author>chen1280436393</author><pubDate>Tue, 29 May 2018 10:37:34 +0800</pubDate><description><![CDATA[对查询进行优化，应尽量避免全表扫描，首先应考虑在 where 及 order by 涉及的列上建立索引: 尝试下面的技巧以避免优化器错选了表扫描： 使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。对扫描的表使用FORCE INDEX告知MySQL，相对于使用给定的索引表扫描将非常耗时。SELECT * FROM t1, t2 FORCE INDEX (index_for_...]]></description><category></category></item><item><title><![CDATA[DBCP连接池 poolpreparedstatements mysql]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/80360320</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/80360320</guid><author>chen1280436393</author><pubDate>Fri, 18 May 2018 10:04:05 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/luyaran/article/details/69397528http://www.360doc.com/content/14/1104/09/1073512_422357018.shtml]]></description><category></category></item><item><title><![CDATA[JS实现关闭当前子窗口，刷新父窗口及调用父窗口的方法]]></title><link>https://blog.youkuaiyun.com/chen1280436393/article/details/80323976</link><guid>https://blog.youkuaiyun.com/chen1280436393/article/details/80323976</guid><author>chen1280436393</author><pubDate>Tue, 15 May 2018 15:48:19 +0800</pubDate><description><![CDATA[一、JS实现关闭当前子窗口，刷新父窗口JS代码如下：&amp;lt;script&amp;gt; function refreshParent() {  window.opener.location.href = window.opener.location.href;  window.close();   }              &amp;lt;/script&amp;gt; html页面代码如下：&amp;lt;input t...]]></description><category></category></item></channel></rss>