软件工程师中中:解除35岁程序员的忧虑 2019年我也33了,离传说中不好找工作的35岁又更近了。说没有焦虑是对自己撒谎,于是我采访了一些人,自己思考了下,写下了这篇文章。先看看大家的态度:色老力衰,不好忽悠,不能带头加班老油条,学不动,加班就是磨洋工关键还是贡献的价值。能不能给业务带来价值找背书基本逻辑就是,比你这个难得多的哥们都搞定了,你这点小事根本不再话下去bat镀镀金,捷径看看你的上...
用PostMan学习上传图片 一、上传时同时带上文件与其它参数 public JsonResult<void> submitBook(HttpServletRequest req,@RequestParam("picFile") MultipartFile file,Long bookBaseId,String isbn,String name,String author,String publishCo...
关于'都要'需求的几种实现思路 "对这些操作,我们都要记录日志。"这是服务器软件的常见需求。一、拦截器如果需求的范围可以定位到我们的某些类或方法 ,这种思路比较合适。不同的环境又有不同的实现方法 ,在web应用中可以用Filter,拦截器(spring mvc、struts)。在数据库层像github.pagehelper就是用的org.apache.ibatis.plugin.Intercepts来拦截query方法 来实现分...
Spring的标注Autowired的required参数与自动注入关系是怎样的? 在回答标题问题前,我们先看一下什么时候才会用到required这个参数,如下图:可以看到,就是DefaultListableBeanFactory.getBean方法去调用的,这个方法的作用是实例化对象。在org.springframework.beans.factory.support.doGetBean可以看到这个过程,如下图:创建对象就要去加载关联的对象,而关联的对象有可
spring如何扫描有注释的类 1.加载xml,初始化上下文,以ClassPathXmlApplicationContext为例一般我们给它的构造方法转入1到多个配置文件,来初始化,如:new ClassPathXmlApplicationContext("/spring-context-ioc.xml")new ClassPathXmlApplicationContext(new String[]{"/
如何用动态字段实现系统的扩展性? 设计系统架构时,我们总是希望一个架构或者说是模型能支持多种业务场景,当然场景是系统范围内的。比如说做商品系统,商品有多种属性,不同类型的商品的属性不一样,怎么用关系型数据库去保存这些不同的属性呢?再比如做CMS时,除了基本的背景、位置、类型、状态等属性一致外,页面不同地方需要的数据结构却是不一样的。 再比如做广告时,不同地方的广告需要用不同属性去区别,而它们又有一些共有的属性,比如类型,名称。
mybatis怎么打印出sql,我被误导了很多年 关于mybatis怎么打印出sql这个问题,可以百度一下,很多答案都有类似这样的答案:就是把java.sql.*,com.ibatis等的日志级别都配置成debug的,也许这么配置与默认的info配置相比真的有效果,把sql打印出来了。可是我今天才发现,打印sql与这些java.sql,com.ibatis包半毛钱关系都没有。至少我调试的mybatis-3.3.0.jar就是这样的
不要欺负我不懂java的volatile 在《java并发编程实战》(Brian Geoetz等著童云兰译)这本书里有对volatile的说明,Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会缓存在寄存器或者对其他处理器不可见的地方,
lucene5.3.1的排序是怎么实现的? 排序有两种方式,在只有一个排序字段的情况下,分别看下这两种方式的实现方式。1.在索引阶段生成排序索引(dvm,dvd):在添加正常的字段后再添加一个该字段的SortedDocValuesField到document,即可按这个字段排序。SortedDocValuesField pathField = new SortedDocValuesField("path", new
智能小车49:atmel328p的pwm调速试验 智能小车的变速怎么实现?arduino uno的芯片atmel328p的引脚可以配置pwm功能。简单来说,这个功能就能调整电流的大小,这样就能控制电机的变速,led不同频率的闪烁。先看下arduino uno的pwm引脚,如下图有六个引脚标有“~”,表示它们可以配置pwm。为什么是3、5、6、9、10、11这6个?先在印制板图里找到这6个引脚的名称分别为:IO3,IO5,IO6,IO9,S
lucene查询索引的6个步骤 先准备数据源,以两个文件名字符串做为值,保存两个document,如下图:然后以"path:txt"为查询条件,来查询索引文件。我调试发现会有6个步骤。数据主要来源于3个文件,tim、doc、fdt。1.先根据查询字段与词找出该字段所有的term(.tim文件中的terms)2.加载tim文件(seekExact方法中currentFrame.loadBlock
HashMap的面试题你能回答几个? 1.HashMap用什么数据结构实现的?答:数组。什么样的数组?答:Node[] table这样的。Node是什么?答:看下图:也就是说这个数组每个元素都是个单向链表。2.HashMap的get过程是?答:先得到key的hash值,再把这个hash值与length-1按位与(取余),得到table数组的下标。取出这个下标值的key,与传入的key比较,如
搜索系统19:lucene索引的五个关键知识点 1.文件锁是怎么实现的?org.apache.lucene.store.NativeFSLockFactory这个write.lock一直为0字节。那它有什么用,怎么判断这个Lock文件就是lucene里定义的锁?如下,判断文件的创建时间是否与之前创建时的时间一致:代码:org.apache.lucene.store.NativeFSLockFactory.Nati
搜索系统18:lucene索引文件结构 1.多文件索引与复合索引的区别2.segments(段)文件3.段元数据.si 保存了索引段的元数据信息4.fnm(域名)文件相当于solr里的schemal.xml文件5.项词典(.TIS、TII)文件lucene老版本的项词典是tis文件,新版本是tim文件,如图:我没在这个文件里找到字段名,可能已经转成了数值。《lu
智能小车48:不用volatile,编译器会优化什么? 有网友评论了我前面的中断实验的c代码,说全局变量需加上volatile关键字。平时写Java程序也没有用到这个,只知道这个用于多线程,但也不能完全解决多线程并发修改共享变量的问题。这几天我都在思考这个问题,向干了多年嵌入式开发的同学请教,还问了下韦东山老师,然后下文就是我的这个问题的理解。测试两种情况 ,分别给全局变量INTNUM加上volatile和不加volatile,然后在AtmelSt
搜索系统17:HttpClient的网络连接是否被复用了 上文查看是否复用连接的方法有误,当时方法是把route(ip与端口等)传给连接池,相同的请求第二次就能返回相同的对象。这是没错,但相同的对象并不代表复用了Socket(连接)。因为这个对象是org.apache.http.pool.RouteSpecificPool。为了搞明白它与连接的关系,是否复用了连接,还需深入分析下。先查看一下它的结构:一、从Socket到CPoolEntr
智能小车46:最小系统Atmega328p的中断实验 我居然没有找到Atmega328p的中文资料,这让我做每个实验都要自己去查下英文资料,比较麻烦。这里再多费话一句,为什么我要用Atmega328p做实验,因为这是arduino uno的mcu,代码可以直接移植到arduino上去。在做了arduino实验后,再看看Atmega328p数据手册、avr单片机、电路原理图,可以从底层深刻理解程序。真希望有更多的同学一起来追问和回答这些底层技术问题。好
搜索系统16:从HttpClient学习连接池 一.HttpClient请求的一般过程1.拿连接2.与服务器建立连接(new Socket)3.从服务获取结果4.keepAlive的判断在代码org.apache.http.impl.execchain.MainClientExec里请求结束后(requestExecutor.execute),用策略模式来判断是否keepAliveif (reus