01 2020 档案

摘要:概览: 两者的作用一样,都是类型转换。 org.springframework.format.Formatter只能做String类型到其他类型的转换。 org.springframework.core.convert.converter.Converter可以做任意类型的转换。 Converter 阅读全文
posted @ 2020-01-20 10:38 reload 阅读(266) 评论(0) 推荐(0)
摘要:我们在开发时会用到 @DateTimeFormat 这个注解。 对于从前台接收时间日期格式 很方便。 但如果前台传来的是 "是" “否” “有” "无" 这样的中文时,想要转成boolean 类型时,没有对应的注解,下面我们自己来实现这个注解。 本例基于 springboot 2.x jdk1.8 阅读全文
posted @ 2020-01-20 10:37 reload 阅读(381) 评论(0) 推荐(0)
摘要:背景:从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,在数据库中显示的是正确的时间格式,获取出来却变成了很丑的时间戳,@JsonFormat注解很好的解决了这个问题,我们通过使用@JsonFormat可以很好的解决:后台到前台时间格式保持一致的问题,其次, 阅读全文
posted @ 2020-01-20 10:35 reload 阅读(276) 评论(0) 推荐(0)
摘要:package com.suncl.test2spring.exception; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework 阅读全文
posted @ 2020-01-20 10:34 reload 阅读(237) 评论(0) 推荐(0)
摘要:本文使用 @ControllerAdvice + @ExceptionHandler 进行全局的 Controller 层异常处理。只要设计得当,就再也不用在 Controller 层进行 try-catch 了! 一、经典案例 需求:希望通过全局统一的异常处理将自定义错误码以json的形式发送给前 阅读全文
posted @ 2020-01-20 10:33 reload 阅读(277) 评论(0) 推荐(0)
摘要:前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,TCP 和 UDP 的区别: TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于数据报的 TCP 保证数据正确性,UDP 可能丢包 TCP 保证数据顺序,UDP 不保证 阅读全文
posted @ 2020-01-20 10:32 reload 阅读(254) 评论(0) 推荐(0)
摘要:1.引子 最近看了一篇文章《蚂蚁消息中间件 (MsgBroker) 在 YGC 优化上的探索》 文章涉及JVM的垃圾回收,主要讲的是通过使用「堆外内存」对Young GC进行优化 文章中介绍,MsgBroker消息中间件会对消息进行缓存,JVM需要为被缓存的消息分配内存,首先会被分配到年轻代。 当缓 阅读全文
posted @ 2020-01-20 10:32 reload 阅读(4672) 评论(0) 推荐(0)
摘要:当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。 1. Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别,我 阅读全文
posted @ 2020-01-20 10:31 reload 阅读(154) 评论(0) 推荐(0)
摘要:非阻塞模式与选择器搭配会工作的更好,通过将一或多个SocketChannel注册到Selector,可以询问选择器哪个通道已经准备好了读取,写入等 上面已经分别介绍过SocketChannel和Selector 但是非阻塞模式与选择器搭配工作的代码没有整合。 如下就是非阻塞模式使用选择器的代码: p 阅读全文
posted @ 2020-01-20 10:30 reload 阅读(835) 评论(0) 推荐(0)
摘要:java NIO中的DatagramChannel是一个能收发UDP包的通道。因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入。它发送和接收的是数据包。 打开 DatagramChannel 下面是 DatagramChannel 的打开方式: DatagramChannel chan 阅读全文
posted @ 2020-01-20 10:28 reload 阅读(463) 评论(0) 推荐(0)
摘要:SocketChannel 1. SocketChannel概述 Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 1.1 打开 SocketChannel 下面是SocketChannel的打开方式: Socke 阅读全文
posted @ 2020-01-20 10:27 reload 阅读(2374) 评论(1) 推荐(0)
摘要:Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。 FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。 打开FileChannel 在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使 阅读全文
posted @ 2020-01-20 10:26 reload 阅读(266) 评论(0) 推荐(0)
摘要:为什么使用Selector? 仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开销很大,而且每个线程都要占用系统的一些资源(如内存)。因此,使用的线程越少越好。 但是,需要记住,现代的操作系统和 阅读全文
posted @ 2020-01-20 10:25 reload 阅读(217) 评论(0) 推荐(0)
摘要:概述 Java NIO开始支持scatter/gather,scatter/gather用于描述从Channel(译者注:Channel在中文经常翻译为通道)中读取或者写入到Channel的操作。 分散(scatter)从Channel中读取是指在读操作时将读取的数据写入多个buffer中。因此,C 阅读全文
posted @ 2020-01-20 10:23 reload 阅读(250) 评论(0) 推荐(0)
摘要:Buffer的基本用法 使用Buffer读写数据一般遵循以下四个步骤: 当向buffer写入数据时,buffer会记录下写了多少数据。一旦要读取数据,需要通过flip()方法将Buffer从写模式切换到读模式。在读模式下,可以读取之前写入到buffer的所有数据。 一旦读完了所有的数据,就需要清空缓 阅读全文
posted @ 2020-01-20 10:21 reload 阅读(395) 评论(0) 推荐(0)
摘要:概述 Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。 通道可以异步地读写。 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: 阅读全文
posted @ 2020-01-20 10:20 reload 阅读(268) 评论(0) 推荐(0)
摘要:概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件 阅读全文
posted @ 2020-01-20 10:19 reload 阅读(186) 评论(0) 推荐(0)
摘要:主要描述了数据库连接池参数配置的准则,针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置 考虑因素 1:当前连接DB的规模 2:并发情况 3:执行db的响应时间 配置考虑 1:初始化连接:可考虑设置为3个连接 。对于db规模特别大的情况下可考虑设置为1个。避免启动时间过长; 2: 阅读全文
posted @ 2020-01-20 10:13 reload 阅读(1393) 评论(0) 推荐(0)
摘要:摘要 如何打造高性能的数据库连接池框架,可以从哪些角度进行优化,连接池的大量优化实践如何为你的系统保驾护航,本专题将带你走进连接池的世界,为你一一揭晓。 大家可能会有这样疑问:连接池类似于线程池或者对象池,就是一个放连接的池子,使用的时候从里面拿一个,用完了再归还,功能非常简单,有什么可讲的。 可能 阅读全文
posted @ 2020-01-20 10:12 reload 阅读(446) 评论(0) 推荐(0)
摘要:数据库连接池的工作原理 连接池的工作原理主要由三部分组成,分别为: 连接池的建立 连接池中连接的使用管理 连接池的关闭 第一、连接池的建立。一般在系统初始化时,连接池会根据系统配置建立,并在池中创建了几个连接对象,以便使用时能从连接池中获取。连接池中的连接不能随意创建和关闭,这样避免了连接随意建立和 阅读全文
posted @ 2020-01-20 10:11 reload 阅读(2090) 评论(0) 推荐(0)
摘要:1.秒杀业务为什么难做 IM 系统,例如 QQ 或者微博,每个人都读自己的数据(好友列表、群列表、个人信息)。 微博系统,每个人读你关注的人的数据,一个人读多个人的数据。 秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。 例如小米手机每周二的秒杀,可能手机只有 1 万部 阅读全文
posted @ 2020-01-20 10:09 reload 阅读(595) 评论(0) 推荐(0)
摘要:引言 阿里的 Java开发手册,上面有线程池的一个建议: 【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。那么到底线程池创建为什么需要使用 ThreadPoolExe 阅读全文
posted @ 2020-01-20 10:08 reload 阅读(213) 评论(0) 推荐(0)
摘要:1.Kafka基本概念 Topic :消息根据Topic进行归类 Producer:发送消息者 Consumer:消息接受者 Kafka cluster:kafka集群 broker:每个kafka实例(server) Zookeeper:依赖集群保存metadata信息 Topic :消息根据To 阅读全文
posted @ 2020-01-20 10:07 reload 阅读(459) 评论(0) 推荐(0)
摘要:1.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM) 的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关 的API,绝大多数MOM提供商都对JMS提供支持 阅读全文
posted @ 2020-01-20 10:06 reload 阅读(246) 评论(0) 推荐(0)
摘要:表查询 order a升序 b降序会导致什么问题 a,b走索引 Mysql: order by后的各项如果排序不一致会导致联合索引失效,譬如 order by a ASC, b DESC, c DESC a升序,b降序,排序不一致,索引(a,b,c)失效 但是建索引的时候也可以指定排序 如果建立一个 阅读全文
posted @ 2020-01-20 10:03 reload 阅读(289) 评论(0) 推荐(0)
摘要:1.自我介绍 首先做一下自我介绍,使用过什么技术之类的 我回答是工作了多少年,使用过spring mvc ,mybatis,数据库用过mysql,oracle之类的。技能点大体列举了一边 2.项目经验 介绍一下你最近参与的项目 我回答了我之前做过的移动营销的项目,介绍了大体是做什么业务的. 看了你写 阅读全文
posted @ 2020-01-20 10:00 reload 阅读(227) 评论(0) 推荐(0)
摘要:如何解决高并发减库存问题 一个大文件4G,里面一行行的数字,这时内存只有256M,如何做排序? 如果你部署的应用所在机器硬盘坏了,会发生什么?你的程序要如何处理这种异 常?(分布式系统中故障是一种常态,设计要避免单点故障,能容错,保证系统高 可用) 实现一个消息队列系统 如何设计一个高可用的架构 多 阅读全文
posted @ 2020-01-20 09:58 reload 阅读(1672) 评论(0) 推荐(0)
摘要:列举一个常用的Redis客户端的并发模型 Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。 Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由 阅读全文
posted @ 2020-01-20 09:56 reload 阅读(463) 评论(0) 推荐(0)
摘要:你在设计一个工厂的包的时候会遵循哪些原则 你能列举一个使用了Visitor/Decorator模式的开源项目/库吗 你在编码时最常用的设计模式有哪些?在什么场景下用? 如何实现一个单例 所谓单例,就是整个程序有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。在Java,一般常用在 阅读全文
posted @ 2020-01-20 09:54 reload 阅读(484) 评论(0) 推荐(0)
摘要:TCP建立连接的过程-三次握手 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示: 第一次握手:Client将标志位 阅读全文
posted @ 2020-01-20 09:53 reload 阅读(780) 评论(0) 推荐(0)
摘要:数据库事务ACID原则 数据库事务正确执行的四个原则:A原子性、C一致性、I独立性、D持久性 原子性 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没发生过一样 一致性 事务开始之前和事务结束后,数 阅读全文
posted @ 2020-01-20 09:52 reload 阅读(348) 评论(0) 推荐(0)
摘要:Spring中Bean的生命周期 在说明前可以思考一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy; Spring上下文中的Bean也类似,如下 1、实例化一个Bean--也就是我们常说的new; 2、按照Spring上下文对实例化的Bean进行配置-- 阅读全文
posted @ 2020-01-20 09:50 reload 阅读(314) 评论(0) 推荐(0)
摘要:硬链接和软链接的区别 在Linux上,一个文件被分为两部分(如图一):用户数据 (user data) 与元数据 (metadata)。 inode号:即索引节点号, 它是文件元数据的一部分,也是文件的唯一标识而非文件名。 通过文件名打开文件时: 硬链接 文件有相同的 inode 及 data bl 阅读全文
posted @ 2020-01-20 09:47 reload 阅读(549) 评论(0) 推荐(0)
摘要:说一下几种常见的排序算法和分别的复杂度 倒排一个LinkedList Collecionts.reverse(List<?> list) 什么是跳表 听到跳表(skiplist)这个名字,既然是list,那么应该跟链表有关。 跳表是有序链表,但是我们知道,即使对于排过序的链表,我们对于查找还是需要进 阅读全文
posted @ 2020-01-20 09:46 reload 阅读(1766) 评论(0) 推荐(0)
摘要:Java中常见的锁分类 常见的锁分类大致有:排它锁、共享锁、乐观锁、悲观锁、分段锁、自旋锁、公平锁、非公平锁、可重入锁等。 a.排他锁和共享锁 synchronized就是一个排他锁,ReentrantLock也是一个排它锁,而ReentrantReadWriteLock则是一个 读共享锁,写排他锁 阅读全文
posted @ 2020-01-20 09:45 reload 阅读(524) 评论(0) 推荐(0)
摘要:谈谈你对解析与分派的认识 解析 Java中方法调用的目标方法在Class文件里面都是常量池中的符号引用,在类加载的解析阶段,会将其中的一部分符号引用转化为直接引用。(关于符号引用与直接引用,详见【深入理解JVM】:Class类文件结构)这种解析的前提是:方法在程序真正运行之前就有一个可以确定的调用版 阅读全文
posted @ 2020-01-20 09:44 reload 阅读(220) 评论(0) 推荐(0)
摘要:实例方法和静态方法有什么不一样 1.在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。 而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 2.静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许 访问实例成员 阅读全文
posted @ 2020-01-20 09:42 reload 阅读(384) 评论(0) 推荐(0)