<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[北漂程序员-中中]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/koolfret</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; koolfret]]></copyright><item><title><![CDATA[软件工程师中中:解除35岁程序员的忧虑]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/86740898</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/86740898</guid><author>koolfret</author><pubDate>Fri, 01 Feb 2019 14:35:37 +0800</pubDate><description><![CDATA[

   

2019年我也33了，离传说中不好找工作的35岁又更近了。说没有焦虑是对自己撒谎，于是我采访了一些人，自己思考了下，写下了这篇文章。

先看看大家的态度：

色老力衰，不好忽悠，不能带头加班

老油条，学不动，加班就是磨洋工

关键还是贡献的价值。能不能给业务带来价值

找背书

基本逻辑就是，比你这个难得多的哥们都搞定了，你这点小事根本不再话下

去bat镀镀金，捷径

看看你的上...]]></description><category></category></item><item><title><![CDATA[用PostMan学习上传图片]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/86638724</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/86638724</guid><author>koolfret</author><pubDate>Fri, 25 Jan 2019 10:44:03 +0800</pubDate><description><![CDATA[一、上传时同时带上文件与其它参数

 


public JsonResult&amp;lt;void&amp;gt; submitBook(HttpServletRequest req,@RequestParam(&quot;picFile&quot;) MultipartFile file,Long bookBaseId,String isbn,String name,String author,String publishCo...]]></description><category></category></item><item><title><![CDATA[关于'都要'需求的几种实现思路]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/80342325</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/80342325</guid><author>koolfret</author><pubDate>Wed, 16 May 2018 20:18:10 +0800</pubDate><description><![CDATA[&quot;对这些操作，我们都要记录日志。&quot;这是服务器软件的常见需求。一、拦截器如果需求的范围可以定位到我们的某些类或方法 ，这种思路比较合适。不同的环境又有不同的实现方法 ，在web应用中可以用Filter,拦截器(spring mvc、struts)。在数据库层像github.pagehelper就是用的org.apache.ibatis.plugin.Intercepts来拦截query方法 来实现分...]]></description><category></category></item><item><title><![CDATA[Spring的标注Autowired的required参数与自动注入关系是怎样的？]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/79277752</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/79277752</guid><author>koolfret</author><pubDate>Wed, 07 Feb 2018 11:00:03 +0800</pubDate><description><![CDATA[在回答标题问题前，我们先看一下什么时候才会用到required这个参数,如下图:


可以看到，就是DefaultListableBeanFactory.getBean方法去调用的，这个方法的作用是实例化对象。在org.springframework.beans.factory.support.doGetBean可以看到这个过程,如下图:

创建对象就要去加载关联的对象，而关联的对象有可]]></description><category></category></item><item><title><![CDATA[spring如何扫描有注释的类]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/79017009</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/79017009</guid><author>koolfret</author><pubDate>Tue, 09 Jan 2018 20:23:17 +0800</pubDate><description><![CDATA[1.加载xml,初始化上下文，以ClassPathXmlApplicationContext为例

一般我们给它的构造方法转入1到多个配置文件，来初始化，如：

new ClassPathXmlApplicationContext("/spring-context-ioc.xml")

new ClassPathXmlApplicationContext(new String[]{"/]]></description><category></category></item><item><title><![CDATA[如何用动态字段实现系统的扩展性？]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78984374</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78984374</guid><author>koolfret</author><pubDate>Fri, 05 Jan 2018 19:07:31 +0800</pubDate><description><![CDATA[设计系统架构时，我们总是希望一个架构或者说是模型能支持多种业务场景，当然场景是系统范围内的。比如说做商品系统，商品有多种属性，不同类型的商品的属性不一样，怎么用关系型数据库去保存这些不同的属性呢？再比如做CMS时，除了基本的背景、位置、类型、状态等属性一致外，页面不同地方需要的数据结构却是不一样的。 再比如做广告时，不同地方的广告需要用不同属性去区别，而它们又有一些共有的属性，比如类型，名称。
]]></description><category></category></item><item><title><![CDATA[mybatis怎么打印出sql,我被误导了很多年]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78926219</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78926219</guid><author>koolfret</author><pubDate>Thu, 28 Dec 2017 20:49:19 +0800</pubDate><description><![CDATA[关于mybatis怎么打印出sql这个问题，可以百度一下，很多答案都有类似这样的答案:



就是把java.sql.*,com.ibatis等的日志级别都配置成debug的，也许这么配置与默认的info配置相比真的有效果，把sql打印出来了。可是我今天才发现，打印sql与这些java.sql,com.ibatis包半毛钱关系都没有。至少我调试的mybatis-3.3.0.jar就是这样的]]></description><category></category></item><item><title><![CDATA[不要欺负我不懂java的volatile]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78846491</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78846491</guid><author>koolfret</author><pubDate>Tue, 19 Dec 2017 19:50:59 +0800</pubDate><description><![CDATA[在《java并发编程实战》(Brian Geoetz等著童云兰译)这本书里有对volatile的说明，Java语言提供了一种稍弱的同步机制，即volatile变量，用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后，编译器与运行时都会注意到这个变量是共享的，因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会缓存在寄存器或者对其他处理器不可见的地方，]]></description><category></category></item><item><title><![CDATA[lucene5.3.1的排序是怎么实现的？]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78815849</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78815849</guid><author>koolfret</author><pubDate>Fri, 15 Dec 2017 18:39:50 +0800</pubDate><description><![CDATA[排序有两种方式，在只有一个排序字段的情况下，分别看下这两种方式的实现方式。

1.在索引阶段生成排序索引(dvm,dvd):

在添加正常的字段后再添加一个该字段的SortedDocValuesField到document,即可按这个字段排序。

SortedDocValuesField pathField = new SortedDocValuesField("path", new ]]></description><category></category></item><item><title><![CDATA[智能小车49：atmel328p的pwm调速试验]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78792372</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78792372</guid><author>koolfret</author><pubDate>Wed, 13 Dec 2017 15:22:05 +0800</pubDate><description><![CDATA[智能小车的变速怎么实现？arduino uno的芯片atmel328p的引脚可以配置pwm功能。简单来说，这个功能就能调整电流的大小，这样就能控制电机的变速，led不同频率的闪烁。
先看下arduino uno的pwm引脚，如下图有六个引脚标有“~”，表示它们可以配置pwm。
为什么是3、5、6、9、10、11这6个？先在印制板图里找到这6个引脚的名称分别为：IO3,IO5,IO6,IO9,S]]></description><category></category></item><item><title><![CDATA[lucene查询索引的6个步骤]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78712462</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78712462</guid><author>koolfret</author><pubDate>Mon, 04 Dec 2017 18:31:07 +0800</pubDate><description><![CDATA[先准备数据源，以两个文件名字符串做为值，保存两个document,如下图:


然后以"path:txt"为查询条件，来查询索引文件。我调试发现会有6个步骤。数据主要来源于3个文件，tim、doc、fdt。

1.先根据查询字段与词找出该字段所有的term(.tim文件中的terms)



2.加载tim文件(seekExact方法中currentFrame.loadBlock]]></description><category></category></item><item><title><![CDATA[HashMap的面试题你能回答几个？]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78651380</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78651380</guid><author>koolfret</author><pubDate>Tue, 28 Nov 2017 09:14:32 +0800</pubDate><description><![CDATA[1.HashMap用什么数据结构实现的？

答:数组。什么样的数组？答：Node[] table这样的。Node是什么？答：看下图：



也就是说这个数组每个元素都是个单向链表。


2.HashMap的get过程是?

答:先得到key的hash值，再把这个hash值与length-1按位与（取余），得到table数组的下标。取出这个下标值的key，与传入的key比较，如]]></description><category></category></item><item><title><![CDATA[搜索系统19：lucene索引的五个关键知识点]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78592192</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78592192</guid><author>koolfret</author><pubDate>Tue, 21 Nov 2017 14:23:08 +0800</pubDate><description><![CDATA[1.文件锁是怎么实现的？

org.apache.lucene.store.NativeFSLockFactory



这个write.lock一直为0字节。那它有什么用，怎么判断这个Lock文件就是lucene里定义的锁？如下，判断文件的创建时间是否与之前创建时的时间一致：

代码:org.apache.lucene.store.NativeFSLockFactory.Nati]]></description><category></category></item><item><title><![CDATA[搜索系统18：lucene索引文件结构]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78550223</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78550223</guid><author>koolfret</author><pubDate>Thu, 16 Nov 2017 13:40:01 +0800</pubDate><description><![CDATA[1.多文件索引与复合索引的区别



2.segments(段)文件



3.段元数据
.si 保存了索引段的元数据信息

4.fnm(域名)文件
相当于solr里的schemal.xml文件


5.项词典(.TIS、TII）文件
lucene老版本的项词典是tis文件，新版本是tim文件，如图:

我没在这个文件里找到字段名，可能已经转成了数值。
《lu]]></description><category></category></item><item><title><![CDATA[智能小车48：不用volatile，编译器会优化什么？]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78528612</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78528612</guid><author>koolfret</author><pubDate>Tue, 14 Nov 2017 11:17:51 +0800</pubDate><description><![CDATA[有网友评论了我前面的中断实验的c代码，说全局变量需加上volatile关键字。平时写Java程序也没有用到这个，只知道这个用于多线程，但也不能完全解决多线程并发修改共享变量的问题。这几天我都在思考这个问题，向干了多年嵌入式开发的同学请教，还问了下韦东山老师，然后下文就是我的这个问题的理解。
测试两种情况 ,分别给全局变量INTNUM加上volatile和不加volatile，然后在AtmelSt]]></description><category></category></item><item><title><![CDATA[搜索系统17：HttpClient的网络连接是否被复用了]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78507213</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78507213</guid><author>koolfret</author><pubDate>Sat, 11 Nov 2017 16:29:00 +0800</pubDate><description><![CDATA[上文查看是否复用连接的方法有误，当时方法是把route(ip与端口等)传给连接池，相同的请求第二次就能返回相同的对象。这是没错，但相同的对象并不代表复用了Socket(连接)。因为这个对象是org.apache.http.pool.RouteSpecificPool。为了搞明白它与连接的关系，是否复用了连接，还需深入分析下。先查看一下它的结构：



一、从Socket到CPoolEntr]]></description><category></category></item><item><title><![CDATA[智能小车46：最小系统Atmega328p的中断实验]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78503199</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78503199</guid><author>koolfret</author><pubDate>Fri, 10 Nov 2017 20:40:11 +0800</pubDate><description><![CDATA[我居然没有找到Atmega328p的中文资料，这让我做每个实验都要自己去查下英文资料，比较麻烦。这里再多费话一句，为什么我要用Atmega328p做实验，因为这是arduino uno的mcu,代码可以直接移植到arduino上去。在做了arduino实验后，再看看Atmega328p数据手册、avr单片机、电路原理图，可以从底层深刻理解程序。真希望有更多的同学一起来追问和回答这些底层技术问题。好]]></description><category></category></item><item><title><![CDATA[搜索系统16：从HttpClient学习连接池]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78481680</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78481680</guid><author>koolfret</author><pubDate>Wed, 08 Nov 2017 18:19:46 +0800</pubDate><description><![CDATA[一.HttpClient请求的一般过程
1.拿连接


2.与服务器建立连接（new Socket)


3.从服务获取结果


4.keepAlive的判断
在代码org.apache.http.impl.execchain.MainClientExec里请求结束后（requestExecutor.execute），用策略模式来判断是否keepAlive
if (reus]]></description><category></category></item><item><title><![CDATA[搜索系统15：tomcat如何使用NIO处理网络请求]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78468098</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78468098</guid><author>koolfret</author><pubDate>Tue, 07 Nov 2017 15:01:42 +0800</pubDate><description><![CDATA[搜索也需要web服务器，要搜得快，web服务器的性能很重要。本文简要介绍下tomcat的启动与请求处理，以便以后调优使用。我的java基础知识很久没更新了，我对连接池的认识还停留在ServerSocket阶段，以为tomcat还是用的这个呢。一看源码，学到了不少新知识，文中源码来自于tomcat-embed-core8.5.5。

一、tomcat启动NIO服务流程
1.主线程实例化Http]]></description><category></category></item><item><title><![CDATA[智能小车45：最小系统(Atmega328p)怎么存数据?]]></title><link>https://blog.youkuaiyun.com/koolfret/article/details/78448927</link><guid>https://blog.youkuaiyun.com/koolfret/article/details/78448927</guid><author>koolfret</author><pubDate>Sun, 05 Nov 2017 13:18:01 +0800</pubDate><description><![CDATA[最小系统(Atemga328p芯片)其实是可以存储数据的，在说存数据前先了解下这个芯片有哪些存储器。


1.Flash(32K Bytes)

就是我们的程序存放的地方，这个最大，但和我们电脑的硬盘有点区别就是程序运行时不可写，只能编程时一次烧录进去。Flash中包含了boot loader，这个后面再学。


2.SRAM(2K Bytes)

和电脑的内存差不多。不过这个]]></description><category></category></item></channel></rss>