<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tony_java_2017的博客]]></title><description><![CDATA[学而不思则罔，思而不学则殆]]></description><link>https://blog.youkuaiyun.com/tony_java_2017</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; tony_java_2017]]></copyright><item><title><![CDATA[idea 启动Flask时host设置和端口设置，以及host=0.0.0.0和127.0.0.1的区别]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/126480569</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/126480569</guid><author>tony_java_2017</author><pubDate>Tue, 23 Aug 2022 13:39:34 +0800</pubDate><description><![CDATA[idea flask 0.0.0.0 port ]]></description><category></category></item><item><title><![CDATA[windows 杀死占用指定端口的进程]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/126391446</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/126391446</guid><author>tony_java_2017</author><pubDate>Wed, 17 Aug 2022 18:16:03 +0800</pubDate><description><![CDATA[windows netstat 端口 进程]]></description><category></category></item><item><title><![CDATA[git 撤销提交 撤销暂存区 取消操作]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/126055121</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/126055121</guid><author>tony_java_2017</author><pubDate>Fri, 29 Jul 2022 14:47:02 +0800</pubDate><description><![CDATA[git 撤销commit git log git show git reset git restore]]></description><category></category></item><item><title><![CDATA[docker镜像 java maven 依赖管理漏洞修复总结]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/124178409</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/124178409</guid><author>tony_java_2017</author><pubDate>Thu, 14 Apr 2022 18:25:57 +0800</pubDate><description><![CDATA[maven 中依赖的管理和升级]]></description><category></category></item><item><title><![CDATA[Go Slice 切片函数间传递到底用变量还是指针？Go语言数据类型，值传递和引用变量类型的思考]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/121593003</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/121593003</guid><author>tony_java_2017</author><pubDate>Sun, 28 Nov 2021 22:24:26 +0800</pubDate><description><![CDATA[go 语言，切片，引用类型，函数间传递，变量还是指针]]></description><category></category></item><item><title><![CDATA[python datetime 求每月的1号的凌晨的时间戳]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/121589624</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/121589624</guid><author>tony_java_2017</author><pubDate>Sun, 28 Nov 2021 12:37:56 +0800</pubDate><description><![CDATA[from datetime import datetime, timezone, timedelta

if __name__ == "__main__":
    jan = datetime.strptime("2019-12-31 16:00:00.000Z", "%Y-%m-%d %H:%M:%S.%fZ")
    jan = jan.astimezone(timezone(timedelta(hours=8)))
    jan = jan + timedelta(hours=8)
    y.]]></description><category></category></item><item><title><![CDATA[Go 并发时限制最大并发度并获取协程结果的两种方式；for range 和for index获取缓冲通道]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/121181533</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/121181533</guid><author>tony_java_2017</author><pubDate>Sat, 06 Nov 2021 18:41:26 +0800</pubDate><description><![CDATA[1.要并发执行的大量任务，假如300个


package main

import "fmt"

func task() {
	fmt.Println("task...")
}

func main() {
	for i := 0; i &lt; 300; i++ {
		go task()
	}
    println("main over...")
}

执行如上代码，会出现task协程全部未运行结束main协程就运行结束了。



但是往往我们需要task协程全部运行结束才让main协程运行结束，那]]></description><category></category></item><item><title><![CDATA[对开源软件修改的一些思考和总结]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/110726644</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/110726644</guid><author>tony_java_2017</author><pubDate>Sat, 05 Dec 2020 21:31:01 +0800</pubDate><description><![CDATA[对开源软件修改的一些思考和总结

 1.为什么修改？

  公司需要开发一款基于web页面的报表应用，但是不能自己从零开发，要基于现有的开源框架进行二次开发或者如果开发框架能满足需求就不再进行二次开发。最后在github上找到一款基于java spring框架的报表软件，但是部分功能不满足目前的需求，需要进行二次开发。

 2.如何修改最合适？

  虽然进行二次开发，领导要求做到不能影响到后续的开源应用升级。也就是说，我们可以对源码进行二次开发，但是我们开发所做的修改不能影响到后续开源应用升级...]]></description><category></category></item><item><title><![CDATA[K8S部署总结以及相关常用命令吐血总结]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/106126533</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/106126533</guid><author>tony_java_2017</author><pubDate>Thu, 14 May 2020 19:29:52 +0800</pubDate><description><![CDATA[1.制作镜像

 在工程的根目录下，也就是包含有Dockerfile文件的目录下，执行如下命令：


docker build -t imageName:tag .

2. 打tag：执行命令


docker tag imageName:tag domain/project/imageName:tag

3.登录镜像库：


docker login -p pwd -u username https://domain

4.push镜像到仓库：


docker push domain/project/.]]></description><category></category></item><item><title><![CDATA[ThreadPool+CountDownLatch+Callable实现多线程编程]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/105964270</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/105964270</guid><author>tony_java_2017</author><pubDate>Thu, 07 May 2020 11:41:01 +0800</pubDate><description><![CDATA[问题背景：

  在Java web项目中，Service层的实现类中需要一个方法连续调用多个别的APP的API，且请求结果之间互相不依赖。如果在项目中给每个方法内部都去新建指定数量的线程，则在高并发场景下由于线程创建的过多，会导致系统资源消耗过多，系统运行变慢或者宕机，所以需要使用线程池；每次api请求之后有返回结果，需要拿到返回结果，并感知可能发生的异常，因此要使用Callable接口实现...]]></description><category></category></item><item><title><![CDATA[MyBatis之Mapper接口的执行过程分析]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/104142523</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/104142523</guid><author>tony_java_2017</author><pubDate>Sun, 02 Feb 2020 14:18:03 +0800</pubDate><description><![CDATA[Mabtis作为一款优秀的持久层框架，不仅提高了我们的开发效率，同时也具备方便快捷的特点。通常我们配置MyBatis的时候都会配置一系列Mappers接口类到MyBatis中，但是如果我们不配置这些Mapper也是可以执行Mapper.xml文件中的SQL语句的，之所以要配置是因为直接使用接口会比不使用接口调用更方便，下面我们先看看不使用接口如何执行SQL。

    Map...]]></description><category></category></item><item><title><![CDATA[MyBatis 高级映射与懒加载]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/85039328</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/85039328</guid><author>tony_java_2017</author><pubDate>Mon, 17 Dec 2018 18:14:31 +0800</pubDate><description><![CDATA[MyBatis的高级映射是该框架非常重要的一个功能，在开发中有广泛应用，在面试中也是常考的内容，下面我们就学习下高级映射。

       引言：MyBatis的的高级映射分为关联和集合两种，关联是一对一关系的映射，集合是一对多关系的映射，都分为嵌套查询和嵌套结果两种实现方式;嵌套查询在数据量不大和关联不多的时候使用比较合适，当数据量大的时候，会出现N + 1问题，导致执行的SQL很多，加载很慢，...]]></description><category></category></item><item><title><![CDATA[406 Not Acceptable 415 Unsupported Media Type  Spring MVC consumes与produces]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84988727</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84988727</guid><author>tony_java_2017</author><pubDate>Sun, 16 Dec 2018 17:50:03 +0800</pubDate><description><![CDATA[        引言：SpringWeb MVC框架在使用的过程中，有时候会出现请求结果报406 Not Acceptable 或者415 Unsupported Media Type的错误，现在学习下为什么报这个错误以及怎么解决。

     Http协议基础知识及概念：

    HTTP（HyperText Transport Protocol）是超文本传输协议的缩写，是客户端浏览器或其他程...]]></description><category></category></item><item><title><![CDATA[SpringMVC API缓存 LastModified的实现总结]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84844634</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84844634</guid><author>tony_java_2017</author><pubDate>Wed, 05 Dec 2018 22:52:55 +0800</pubDate><description><![CDATA[      Servlet的生态中，提供了一种友好机制用来提高系统的响应速度，当客户端查询的数据在没有变化的情况下直接返回，以减少服务器压力和网络传输的压力。Spring MVC也很好的继承了该机制，下面我们就学习下怎么使用LastModified。

1.handler是实现了LastModified的Servlet


public class MyServlet extends HttpSe...]]></description><category></category></item><item><title><![CDATA[【设计模式】学习之结构型 适配器模式-装饰器模式-代理模式]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84616402</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84616402</guid><author>tony_java_2017</author><pubDate>Tue, 04 Dec 2018 18:11:48 +0800</pubDate><description><![CDATA[本篇主要学习适配器模式，装饰器模式，代理模式的使用和结合开源组件源码进行分析，最后对他们作以比较

适配器模式

     适配器模式，提起适配器我们首先想到的就是春天框架中的RequestMappingHandlerAdapter，那么我们看看它的顶级接口的的HandlerAdapter的注释：



其中第一段的注释如下：

此接口用于允许{@link DispatcherServlet}无限...]]></description><category></category></item><item><title><![CDATA[Maven+Eclipse+Tomcat+Spring MVC web 请求 404 问题总结及noHandlerFound]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84782346</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84782346</guid><author>tony_java_2017</author><pubDate>Tue, 04 Dec 2018 08:09:01 +0800</pubDate><description><![CDATA[    在Eclipse开发环境下基于Maven的Spring 4.3.18.RELEASE 版本开发一个web项目，并使用Tomcat发布，项目正常启动后，遇到一个请求报404，问题分析总结如下：

1.contextPath是否正确

    因为tomcat默认是以项目包的名字为contextPath的，而maven者是以artifactId为名字打一个war包，因此在默认情况下contex...]]></description><category></category></item><item><title><![CDATA[【设计模式】学习之创建型 原型模式]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84575724</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84575724</guid><author>tony_java_2017</author><pubDate>Wed, 28 Nov 2018 22:56:21 +0800</pubDate><description><![CDATA[1.Object.clone()方法

在学习原型模式以前，我们先学习下Object对象的一个clone()方法，JDK1.8源码如下：


/**
     * Creates and returns a copy of this object.  The precise meaning
     * of &quot;copy&quot; may depend on the class of the object...]]></description><category></category></item><item><title><![CDATA[【设计模式】学习之创建型 单例模式]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84557388</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84557388</guid><author>tony_java_2017</author><pubDate>Tue, 27 Nov 2018 23:32:29 +0800</pubDate><description><![CDATA[       提起单例模式，我们一般首先想到的就是Spring 框架中的Bean的作用域singleton，当一个bean的作用域为单例的时候，这个bean在Spring 的容器中只有一个实例化的对象。那么我们如何实现一个单例对象呢？

首先，构造函数私有化，这样子就只能在该类中调用new 方法创建该类的对象。其次，变量必须是类变量来接收这个创建的实例对象；最后提供一个公共的静态方法，对外提供获取...]]></description><category></category></item><item><title><![CDATA[【设计模式】学习之创建型 建造者模式]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84501872</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84501872</guid><author>tony_java_2017</author><pubDate>Mon, 26 Nov 2018 11:31:31 +0800</pubDate><description><![CDATA[上一篇 我们学习了工厂模式 ，这一篇我们学习建造者模式，所谓建造者模式就是要我们像现实生活中的建筑建造者一样 一个步骤一个步骤地建造自己的伟大建筑，因为伟大的建筑都是复杂的。当我们要建造一个复杂的对象时，只能是一步一步的进行构造，而不能像平常那样，直接使用一个构造函数进行构造。接下来我们还是结合MyBatis源码学习该模式：

1. MappedStatement

    该类是MyBatis中...]]></description><category></category></item><item><title><![CDATA[【设计模式】学习之创建型 工厂模式]]></title><link>https://blog.youkuaiyun.com/tony_java_2017/article/details/84451080</link><guid>https://blog.youkuaiyun.com/tony_java_2017/article/details/84451080</guid><author>tony_java_2017</author><pubDate>Sun, 25 Nov 2018 10:59:05 +0800</pubDate><description><![CDATA[        工厂模式，在开发中广泛使用的一种用于对象创建的设计模式，尽管有时候我们可能并不知道自己使用的就是工厂模式或者看到的开源软件源码中用到的就是工厂模式。开源软件中的MyBatis中的SqlSession的创建就是使用了工厂模式，分析如下：

接口 SqlSessionFactory 


/**
 * Creates an {@link SqlSession} out of a con...]]></description><category></category></item></channel></rss>