- 博客(82)
- 资源 (1)
- 收藏
- 关注
原创 Java8 Collectors.toMap的坑
按照常规思维,往一个map里put一个已经存在的key,会把原有的key对应的value值覆盖,然而通过一次线上问题,发现Java8中的Collectors.toMap反其道而行之,它默认给抛异常,抛异常... 线上业务代码出现Duplicate Key的异常,影响了业务逻辑,查看抛出异常部分的代码,类似以下写法:Map<Integer, String> map = li...
2018-09-13 12:10:55
81402
12
原创 BigDecimal精度与相等比较的坑
先想一下,创建BigDecimal对象的时候一般是怎么创建的?new一个,传进去值BigDecimal.valueOf方法,传进去值 作为一个数字类型,经常有的操作是比较大小,有一种情况是比较是否相等。用equal方法还是compareTo方法?这里就是一个大坑//new 传进去一个doubleBigDecimal newZero = new BigDecimal(0.0);...
2018-09-13 11:41:33
3178
原创 GET、POST编码问题
GET请求、POST经常会出现中文乱码的问题,最好约定前后端的编码,一般为UTF-8。但是这里面也是有坑的。后端设置编码为UTF-8的推荐方式:SpringMVC配置过滤器:<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.spr...
2018-06-25 11:11:09
399
原创 Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段。单条记录插入并返回First, if your database supports auto-generated key fields (e.g. MySQL and SQL Server), then you can simply set useGenerated...
2018-06-25 11:00:19
1932
原创 大数据量下的集合过滤—Bloom Filter
算法背景如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘,要么是内存。很多时候要么是以时间换空间,要么是以空间换时间。在响应时间要求比较严格的情况下,如果我们存在内里,那么随着集合中元素的增加,我们需要的存储空间越来越大,以及检索的时间越来越长,导致内存开销...
2018-06-23 18:27:41
3800
原创 Mysql 时间类型精度截取的bug
mysql-connector-java版本升级出现的一次问题。涉及到了时间精度的截取和四舍五入。首先了解一点,timestamp,datetime如果不指定精度,默认的精度是秒。当mysql-connector-java版本<=5.1.22时,db的客户端会将Datetime,Timestamp秒以下的精度丢弃。版本>5.1.22后,秒以下的值将不会截断db的server端会对超出精...
2018-06-23 18:05:07
798
原创 Tomcat NIO
说起Tomcat的NIO,不得不提的就是Connector这个Tomcat组件。Connector是Tomcat的连接器,其主要任务是负责处理收到的请求,并创建一个Request和Response的对象,然后用一个线程用于处理请求,Connector会把Request和Response对象传递给该线程,该线程的具体的处理过程就是Container容器的事了。在tomcat启动过程中,会初始化Con...
2018-04-11 15:00:23
3342
原创 Java NIO
了解java的NIO,需要先了解同步异步以及阻塞非阻塞的概念,同步/异步,阻塞/非阻塞NIO就是采用的同步非阻塞这种组合方式。或简单一点,采用的是IO复用的策略,可以使用一个线程管理多个IO连接。BIO常见使用方式传统的BIO是同步阻塞的方式,因此,在服务器中常见的使用方式是:来一个请求创建一个线程,阻塞的等待网络IO的数据。使用一个线程池,来一个请求就从线程池里取出来一个线程,阻塞的等待网络IO...
2018-03-28 14:22:48
728
原创 Java线程的几种状态
java.lang.Thread.State中定义的集中Java线程的状态:/** * A thread state. A thread can be in one of the following states: * <ul> * <li>{@link #NEW}<br> * A thread that has not yet started...
2018-03-20 17:31:20
238
原创 读取含有BOM头的文件遇到的问题
需求是读取一个csv文件,然后解析成对应的数据结构。csv必须包含指定的某些列,通过列名header来进行校验。 解析配置文件的方法。public List<QuestionData> buildConfigData(final MultipartFile file) { CsvReader csvReader = null; List<QuestionData...
2018-03-13 10:22:21
2740
1
原创 @RequestParam加与不加的区别
最简单的两种写法,加或不加@RequestParam注解@RequestMapping("/list")public String test(int userId) { return "list";} @RequestMapping("/list")public String test(@RequestParam int userId) { r...
2018-03-12 15:13:48
16818
1
原创 curl命令踩的坑
使用curl命令执行get请求,带多个参数:curl localhost:8080/user/binding/query?userId=123456&wrapperId=123&from=test[1] 8937[2] 8938{"ver":"1.0.0","status":1,"message":"Required String parameter 'wrapperId' ...
2018-03-08 10:59:27
5856
原创 HTTPS握手
作用内容加密 建立一个信息安全通道,来保证数据传输的安全;身份认证 确认网站的真实性数据完整性 防止内容被第三方冒充或者篡改https的采用了对称加密和非对称加密。握手过程中采用非对称加密,得到一个对称加密的秘钥。数据传输的过程中,采用对称加密。采用非对称加密比较慢,因此只在握手期间采用非对称加密,保证拿到的对称加密的秘钥的安全性,数据传输期间通过对称加密来加密,速度更快。握手:对称加密秘钥的生成...
2018-03-08 10:37:41
4254
原创 Tomcat启动过程源码解读
根据Tomcat源码来看一下Tomcat启动过程都做了什么部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程先来一张启动过程时序图,了解一下启动顺序Tomcat启动的入口类:org.apache.catalina.startup.Bootstrap#mainmain方法是整个tomcat启动时的入口。在main方法中,使用bootstrap.init()来初始化类加载...
2018-03-07 19:37:56
501
原创 同步/异步,阻塞/非阻塞
什么是同步和异步同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知。什么是阻塞和非阻塞阻塞和非阻塞是针对于进程在访问数据的时候,根据IO操作的就绪状态来采取的不同方式,阻塞方式下读取或者写入函数将一直等待,而非阻塞方式下,读取或者写入函...
2018-02-27 21:01:19
301
原创 SpringMVC静态文件过滤
如果在web.xml加了如下配置,那么静态资源文件也会被拦截:<servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern></servlet-mapping>如果要静态资源文件不被过滤,有三种方法。方...
2018-02-26 14:38:23
438
原创 Git总结
git在本地分为三个区域,工作区、暂存区和本地仓库,具体情况如下:git的一般操作就是本地代码的修改提交回滚,以及与远程仓库的拉取、合并、提交等。git fetch 从远程仓库上抓取分支到本机origin的dev分支上git merge 将origin上的分支合并到工作区的dev分支上git pull 相当于前两个命令合在一起
2017-07-24 22:36:13
314
原创 基于深度学习的图像风格转换
距离上次写博客已经好久好久好久了,真是懈怠的生活节奏,整天混吃等死玩游戏,前些日子做毕业设计时总算又学了点新东西。学了一点深度学习和卷积神经网络的知识,附带着详细学习了一下前段时间我觉得比较有意思的图像风格转换。毕竟是初学,顺便把神经网络方面的知识也写在前面了,便于理解。若有不对的地方的话,希望指正。 主要参考的文献有《A Neural Algorithm of Ar
2017-06-21 13:35:56
16758
10
原创 校招碎碎念
前两天拿了去哪儿(Qunar)的offer,不打算接着找了,心累,结束我的校招生涯吧,写写这段时间的经历。 本科生一只,普通一本,非211/985学校,出了省就没人认那种,计算机专业,目前大四。找工作大概从大三下学期开始吧,那时候各大厂开始招实习,接着陆陆续续的有七八月份的内推,九、十月份的校招,一路面试过来,跪了一路。个人是做Java开发的,做过爬虫,做过Web,学
2016-10-25 22:54:14
1329
1
原创 浅谈对Spring Framework的认识
Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of dep
2016-09-17 16:22:27
664
原创 LeetCode-70-Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top.Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 题意:爬台阶问题。每次能爬一个或两个台阶,问一
2016-06-24 23:14:32
336
原创 LeetCode-66-Plus One
Given a non-negative number represented as an array of digits, plus one to the number.The digits are stored such that the most significant digit is at the head of the list. 题意:给定一个由数组表示的数字
2016-06-24 22:35:22
303
原创 LeetCode-62-Unique Paths
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).The robot can only move either down or right at any point in time. The robot is trying to reach the
2016-06-23 07:50:46
388
原创 LeetCode-53-Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] ha
2016-06-22 23:29:22
278
原创 LeetCode-15-3Sum
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.Note: The solution set must not contain
2016-06-22 22:47:35
245
原创 LeetCode-9-Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space. 判断一个整数是否是回文数。 思路:求出数字abcd的逆序的数值dcba,如果是回文数的话,那么abcd==dcba。 时间复杂度:O(n) python代码:class Soluti
2016-06-22 22:46:41
308
原创 LeetCode-1- Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution.Example:Given nums = [
2016-06-22 22:45:38
293
原创 浅谈Struts2
学过SSH框架很长一段时间了,一直没有很系统的总结一下,这里先简单谈谈Struts2。 为什么要用Struts2? 这里列举一些Servlet的缺点:1、每写一个servlet在web.xml中都要做相应的配置。如果有多很servlet,会导致web.xml内容过于繁多。2、这样的结构不利于分组开发。3、在servlet中,doGet方法和d
2016-05-11 20:09:30
7452
原创 探究JVM——垃圾回收
垃圾回收主要考虑三件事情:哪些内存需要回收?什么时候回收?如何回收? 一、哪些内存需要回收? 堆内存:对于JVM 来说,垃圾回收主要是针对堆内存中的对象实例。方法区:垃圾收集行为在方法区是比较少出现的,一般来说,这个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域的回收确实是必要的。 二、什么时候回
2016-05-01 20:58:21
3737
原创 探究JVM——运行时数据区
最近在读《深入理解Java虚拟机》,收获颇丰,记录一下,部分内容摘自原书。 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示:
2016-04-30 11:51:23
1230
原创 OS存储器管理(三) 虚拟存储器
基本概念与实现 1)局部性原理在一段时间内,运行的作业程序仅访问(涉及到)一部分作业代码,即不会涉及整个地址空间。即在一段时间间隔内,仅装入一部分代码,作业照样能正常运行2)虚拟存储器的引入作业(进程)运行时,仅装入其代码的一部分到物理内存,待需要时再装入其余部分,同时还可将不再运行的部分调出物理内存。变相地扩充了内存容量,即实现了虚拟存储器。
2016-03-14 23:02:59
694
原创 OS存储器管理(二)
离散分配分页(Paging),分段,段页式 一、分页 一个进程的物理地址可以是非连续的; 将物理内存分成固定大小的块,称为块(frame);将逻辑内存分为同样大小的块,称为页(page);将连续的页分配并存放到不连续的若干内存块中;建立页表,记录每一页对应的存储块的块号,将逻辑地址转换为物理地址。将产
2016-03-13 22:46:17
470
原创 sql server存储过程编程
存储过程是一组完成特定功能的SQL 语句集合,经编译后存储在数据库中。 存储过程作为一个单元进行处理并以一个名称来标识。它能向用户返回数据、向数据库表中写入或修改数据等操作。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 存储过程的作用执行速度快;减少网络流量;作为一种安全机制。通过设置用户只可能使用存储过程访
2016-03-05 11:36:50
1418
原创 sql server 触发器
触发器是一种特殊类型的存储过程。触发器可包含复杂的T-SQL语句。触发器不能通过名称被直接调用,也不允许设置参数。它是建立在触发事件上的。 触发器可以强制执行一定的业务规则,以保持数据完整性、检查数据有效性、实现数据库管理任务和一些附加功能。 触发器的分类: DML、 DDL、 登录触发器 创建触发器需要指定的选项: 1.触发器的名称。
2016-03-03 22:56:27
796
原创 T-SQL 查询、修改数据表
T-SQL修改表数据 INSERT语句语法:INSERT [TOP(expression) [PERCENT]][INTO] { | rowset_function_limited [ WITH ( [ ...n ] ) ] /*指定表提示*/ | view_name } /*视图名*/ { [(column
2016-03-02 23:13:34
1627
原创 sql server 事务处理
事物处理 事务是SQL Server中的单个逻辑单元,一个事务内的所有SQL语句作为一个整体执行,要么全部执行,要么都不执行。事务有4个属性,称为ACID(原子性、一致性、隔离性和持久性) 原子性 事务必须是原子工作单元。对于其数据修改,要么全都执行,要么全都不执行。一致性 事务在完成时,必须使所有的数据都保持一致状态。隔离性 由并发事务所做
2016-02-18 21:26:15
732
原创 OS存储器管理(一)
存储器的层次:分为寄存器、主存(内存)和 辅存(外存)三个层次。 主存:高速缓冲存储器、主存储器、磁盘缓冲存储器, 主存又称为可执行存储器;辅存:固定磁盘存储器、可移动的外部存储器; 其可长期保存数据,但不能被处理器直接访问。 此处针对的是在OS层面上对主存(内存)的管理。 内(主)存储器管理的主要功能:① 逻辑地址到物理
2016-01-24 02:30:46
742
原创 页面调度算法模拟
模拟实现的算法:FIFO,Optimal(最佳置换),LRU,Clock,改进的Clock算法 一、先入先出(FIFO): 最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内
2016-01-23 23:18:50
1652
原创 处理机进程调度模拟
一、进程调度 无论是在批处理还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。进程调度属于处理机调度。 处理机调度分为三个层次:高级调度:(High-Level Scheduling)又称为长程调度、作业调
2015-12-27 13:53:02
1995
原创 递归与分治之棋盘覆盖问题
在一个2^k * 2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘。显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不同的特殊棋盘。下图所示的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。 在棋盘覆盖问题中,要用
2015-11-26 13:02:21
544
飞机订票系统
2014-12-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人