自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

u010900754的专栏

真心希望国内博客环境 多一些原创 少一些复制

  • 博客(635)
  • 资源 (3)
  • 收藏
  • 关注

原创 【Spring(五)】AnnotationConfigApplicationContext 原理

对于main函数中使用spring的场景,有两个常见的高级容器。一个是ClassPathXmlApplicationContext,基于classpath下的xml配置文件;另一种是AnnotationConfigApplicationContext,基于java配置文件。各自的使用在这篇里有讲:https://blog.csdn.net/u010900754/article/details/...

2019-08-18 20:16:27 21031 1

原创 【Spring(六)】@Import 注解使用

看下注解定义: * Indicates one or more {@link Configuration @Configuration} classes to import. * * <p>Provides functionality equivalent to the {@code <import/>} element in Spring XML. * O...

2019-08-18 19:11:09 185

原创 【SpringMVC(十)】基于Java类 配置SpringMVC

在servlet3.0之前,是使用xml配置文件来启动springmvc的。主要是:在web.xml里面配置一个listener以及一个dispatcherServlet,可以配置一个applicationContext的父容器配置文件;再配置一个springmvc的配置文件,里面主要是配置component-scan和annotation-driven;在servlet3....

2019-08-17 20:28:24 804

原创 【SpringMVC(九)】返回值

springmvc最开始支持的是返回一个web页面,主要是jsp。为了支持jsp的渲染,引入了一个ModelAndView类。所以通常情况下,早期的控制器直接返回的就是一个ModelAndView对象。甚至在DispatcherServlet中,一个handler的返回结果就是ModelAndView类型。但是,随着后端技术的发展,springmvc更多的是作为一种后端服务的框架,返回值已...

2019-08-11 19:22:39 159

原创 【SpringMVC(二)】HandlerMapping

HandlerMapping在springmvc中也是很重要的一个模块,其主要职责是根据request请求的路径来匹配到特定的控制器。首先看下其接口方法:public interface HandlerMapping { HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;}...

2019-08-11 01:01:06 400

原创 【SpringMVC(三)】 HandlerAdapter

HandlerAdapter在springmvc中是一个十分重要的角色。作用如下:1.负责直接调用控制器来处理请求;2.负责在调用控制器的前定制化处理request以及在调用后定制化处理response;3.隐藏不同类型控制器的调用细节;下面看一下HandlerAdapter接口:public interface HandlerAdapter { /** * Gi...

2019-08-11 00:59:38 518

原创 【SpringMVC(八)】@ResponseBody 使用 及 原理

@Response注解用于表明控制器返回的是json而非jsp页面。例子:@RequestMapping("/testBody") @ResponseBody public Object testBody(){ Person person = new Person(); person.setAge(10); person.s...

2019-08-10 20:51:12 2018

原创 【SpringMVC(六)】@RestController 与 @Controller 区别

其实很简单,打开@RestController注解即可:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Controller@ResponseBodypublic @interface RestController { /** * The value may indicate a...

2019-08-10 20:44:44 115

原创 【设计】关系类业务

后端设计中,常常有一种场景,就是关系类的存储。比如订阅或者关注等。就以关注为例。通常来说,记录关注关系,需要落地到db,那么表结构大概是怎样的?很容易想到的一个表结构:id:自增id;userId:被关注用户id;followerId:关注用户id核心信息其实就这几个。这个表可以解决简单的场景。但是当数据量越来越大,可能需要搞缓存。那么缓存怎么存?第一反应应该是一个se...

2019-08-08 23:45:42 134

转载 【转】浮点数

https://cloud.tencent.com/developer/article/1194984http://c.biancheng.net/view/314.html

2019-08-08 23:26:34 116

原创 【SpringMVC(四)】三种 HandlerMapping

HandlerMapping是一个接口,作用是通过httprequest中的url找到合适的handler:HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception;其中就只有这一个方法。目前有三种实现:1.BeanNameUrlHandlerMapping需要在配置文件中配置c...

2019-08-05 20:05:34 369

原创 【SpringMVC(五)】三种 控制器

现在我们在使用springmvc时,都是直接用的注解类型的控制器,其实还有另外两种,这里一起回顾下。1、实现org.springframework.web.servlet.mvc.Controller接口:public class HelloController implements Controller { @Override public ModelAndView h...

2019-08-04 23:44:24 383

原创 【Java】ResourceBundle 使用

ResourceBundle提供了一种本地化资源的机制。大致原理:提供不同语言或者不同国家的properties文件。假设properties文件名为message,不同语言的文件名对应为:message_{language}_{country}.properties。language以及country可以省略。如果全部省略,就是默认文件。ResourceBundle提供了一个...

2019-08-04 19:15:23 507

原创 【http】常见的content-type

1.application/x-www-form-urlencoded参数会是一个一个的键值对:key1=value1&key2=value2。后端可以直接使用web容器的内置的方法get。2.mulpart/form-data参数之间被分隔符分开,常用于文件上传。如果是文件,分隔符之间是二进制数据。3.application/json:...

2019-08-04 18:21:34 284

原创 【SpringMVC(七)】使用ArgumentResolver 接受 json 参数

这里介绍下如何使用一个argumentResolver预处理httpServlet里的body,并且提取出json参数,传递给controller。先定义一个标记注解:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.PARAMETER)public @interface JsonParams {}再定义一个处理该标记...

2019-08-04 18:04:47 1046

原创 【Java】fail-safe 以及 fail-fast 原则

这是两种编程的思想,是在平时写代码以及设计时需要遵循的原则。fail-fast:简言之,快速失败。我们在设计一个模块(可以是一个函数,一个类甚至是一个服务)时,如果有某种条件会导致模块无法正常运行下去,就应该让模块立刻终止(可以是return,也可以抛一个runtimeexception)。这样做有两种好处:1)及早终止,防止错误一直被带到下游,导致下游服务崩溃或者产生脏数据;2)...

2019-08-03 15:14:07 1047

原创 【Java】Map steam merge NPE

今天踩了一坑,记录下。java的map有一个merge方法,里面传入的key和mergeFunction不能是空,否则报错: default V merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction) { Obje...

2019-08-02 23:59:20 450

原创 【SpringMVC(六)】ArgumentResolver 使用 及 原理

ArgumentResovler是springmvc为我们提供的一个处理controller请求参数的扩展点。下面看一个常见的使用例子。现在有一个web应用,api接口需要拿到一个userId,但是这个userId又不能直接通过http参数拿,可能是传一个token,然后,根据token从服务器取出登录用户的userId。当然一种方案是在interceptor里面解析token拿到user...

2019-07-28 14:19:39 6731 1

原创 【Java】运行main函数的两种方式

方式一:使用java -jar命令直接运行jar包,需要在manifest文件内写入main方法的入口类。可以使用maven-jar-plugin实现: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId>...

2019-07-28 10:43:16 5187

原创 【Java】guava(六)函数式编程与惰性求值

举个例子,比如我们的web服务器应用,我们可能会写一个类似拦截器一样的模块来提前把一些公共参数抽取出来,比如像token,userid,ip地址等等这样的信息,放入一个类似ThreadLocal的对象中,后面的controller如果想要用就可以直接拿。方案一:及早求值,每一次都直接计算出最终结果,存放至ThreadLocal;实现起来很直观也很简单,但是可能大多数请求在被后面的contr...

2019-07-27 12:50:24 486

原创 【Java】guava(五) splitter joiner

List使用:@Test public void testList(){ List<String> list = Splitter.on("-") .splitToList("A-B-C"); System.out.println(list); List<String> list...

2019-07-27 11:59:47 286

原创 【Java】apache CommandLine 使用

首先说一下CommandLine的设计理念。我们知道,java程序的启动入口是main方法,我们其实已经可以通过main中的args参数来实现将外界变量传入main方法内部了,那为什么还需要CommandLine?因为args参数使用不够方便,主要是因为其实现是一个数组,整个传递过程需要依赖顺序。编程者和程序调用需要记忆参数的顺序,才能正确传递参数。这个设计其实是不太好的。更好的做法是...

2019-07-26 23:29:11 6586

原创 【缓存】空占位符

缓存-db的这套模式,在读数据时,需要考虑一个问题:如果一个数据不存在,还要加载进缓存吗?比如说一个redis的key。如果不加载,那么每次读取这个数据时都会落到db里;如果某一个维度是刚加的,那么可能导致大量缓存穿透,db被打满。比如用户是千万级别,这时加了一个用户级别的数据,最开始每一个用户都没有,需要业务逻辑跑起来慢慢加。但是读接口会一直访问这份数据。所以,如果qps很高,没有数...

2019-07-24 23:33:09 443

原创 【Java】string 转 long L

一般定义一个long类型的常数会在数组末尾加一个L,但是如果想要从string转成long,string的常量不能加L:System.out.println(Long.valueOf("0L")); at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at ja...

2019-07-24 10:27:41 1270

原创 【Java】Springmvc @RequestParam 参数 400

如果加了@RequestParam注解,那么请求url里必须包含这一参数,否则会报400。那么如果允许不传呢?有两种办法:1)使用default值,类似:@RequestMapping(value = "/get", method = RequestMethod.POST) public String query(@RequestParam(value = "id", d...

2019-07-22 22:56:13 3578

原创 【Java】Instrumentation热更新 premain agentmain

有两种办法:1)在java5中,可以利用jvm加载类的一个扩展点来实现类文件的动态修改。需要提供一个premain方法。缺点是只能在类文件加载且main方法执行之前修改,无法实现真正的运行时修改。2)在java6中,可以使用attach API实现真正的运行时修改。需要提供一个agentmain方法。大致原理是使用agent attach api附到待更新的jvm上,然后动态加载age...

2019-07-21 23:55:08 2671

原创 【Java】javasist 初探

Javasist是一款字节码工具,可以用来动态修改字节码。反射机制也可以在运行时操作字节码,但是无法修改字节码。Javasist提供了动态修改字节码的能力。相比较于其他工具比如ASM,Javasist更加高层,不需要了解字节码文件的结构,但是运行效率不如ASM等更底层的工具。对于初学者而言,Javasist更加友好。下面使用Javasist写一个小例子,在类方法前后各打印一条语句。mave...

2019-07-21 18:44:16 597

原创 【Java】Agent attach

。。https://blog.csdn.net/youyou1543724847/article/details/84952218https://www.cnblogs.com/stateis0/p/9062201.html

2019-07-21 00:10:46 468

原创 【Arthas】使用 watch命令 线上诊断

如果debug线上环境但是又没有加日志,怎么办?可以使用arthas的watch命令来诊断。测试程序:/** * Hello world! * */public class App{ private List<Integer> p = new ArrayList<Integer>(); private static int num = ...

2019-07-20 20:04:31 6709 2

原创 【Arthas】热更新

热更新是啥?不停止java应用的情况下,直接替换虚拟机内的字节码;用处?比较多的是测试环境debug。测试环境并不像本地环境一样调试方便,需要编译,打包,部署。步骤?下面介绍下如何使用Arthas实现热更新。先看一下用于测试的java程序:/** * Hello world! * */public class App { private doubl...

2019-07-20 19:06:06 1657

原创 【Kafka】offset策略 客户端原理

1.消费者本地offsetKafka consumer会在本地维护每一个分区的消费offset,然后再发送拉取请求的时候,会把分区对应的本地offset发送给broker,broker按照请求里的offset来返回消息,broker不会维护每一个客户端的消费进度。但是broker会维护partition级别的offset,这样新的consumer第一次消费或者再均衡消费时,就可以根据这个off...

2019-07-14 21:57:02 1190

原创 【kafka】commit offset 自动提交 源码

Kafka可以配置自动提交,在每一次poll拉取数据时提交上一次消费的offset。@Override public ConsumerRecords<K, V> poll(long timeout) { acquireAndEnsureOpen(); try { if (timeout < 0) ...

2019-07-14 21:41:48 3317 2

原创 【Java】Spring bean 生命周期

主要研究下spring这几个重要的点的先后顺序和原理:1.构造器;2.autowired3.init-method4.PostConstruct5.BeanPostProcessor的方法6.InitializingBean的afterPropertiesSet方法这里可以肯定的是构造器先于其他所有的。从实现上,autowired,postConstru...

2019-07-14 00:12:46 118

原创 【Java】Spring 属性注入 @Autowired 原理

主要分两块,一是xml文件定义的bean,另一个是@Autowired。1. xml文件bean定义的读取入口还是在bean定义的解析与注册上,这里省略前面部分直接看XmlBeanDefinitionReader的解析部分: @Override public int loadBeanDefinitions(Resource resource) throws BeanDefini...

2019-07-13 22:58:45 993

原创 【Java】Spring init-method和@PostConstruct 原理

我们知道如果想要自定义bean的初始化行为,有两种方法:1)使用xml配置在bean的xml定义中指定init-method属性。2)注解配置在bean的class定义中添加@PostConstruct注解。例子:xml如下配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http:...

2019-07-07 20:21:18 19733

原创 【redis】zset 命令

1)添加zadd key score1 member1 score2 member2 ....2)查看单个元素查看rankzrank key member:增序zrevrank key member:降序许多zset的命令都会提供增序和降序两个版本,而且默认是增序排序的。查看scorezscore key member3)查看整个set按照rank查...

2019-07-07 13:11:20 4106

原创 【Java】guava(四) RateLimiter

说到限流,大体上可以分为两种实现。1.漏桶或者令牌桶;思路之前介绍过:https://blog.csdn.net/u010900754/article/details/885688812.计数器;关于计数器,这里简单介绍下。大体是,维护一个整型变量count,每一次调用都以cas的方式将count减一,调用完将count加一。整体上是这样,当然里面有很多诸如同步,多线程等细节问题需...

2019-07-07 00:09:37 302

原创 【mysql】insert 冲突

问题,如果在某一列或者某几列上定义了unique约束或者key,插入相同的数据就会报错,例子:mysql> show index from user;+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------...

2019-07-06 22:54:46 505

原创 【mysql】unique key index区别

关系大致是这样:mysql中的unique约束是通过索引实现的;key的含义是概念级别的,意味着唯一性,key的概念等价于unique;所以说只要加了unique约束或者key,就会建立一个索引。在mysql中,使用index或者unique(以及key)都会简历索引,区别在于是否允许重复,这个可以在show index命令中看到。CREATE TABLE user1(...

2019-06-30 13:47:31 5042

原创 【Java】NamedParameterJdbcTemplate 用法

NamedParameterJdbcTemplate底层实现还是JDBCTemplate,只不过后者传参是通过占位符,所以需要维护顺序。这里的NamedParameterJdbcTemplate则提供了通过指定名字的方式来传参,可以不用再可以维护位置。因为要指定名字传参,所以需要提供一个键值对,在NamedParameterJdbcTemplate里有是那种方式:1.传入一个map;2...

2019-06-29 23:45:41 910

设计模式的 课件

主要讲解了 设计模式的相关内容 包括类图等其他

2014-04-15

head first 审计模式

headfirst 一系列书籍中 对设计模式的讲解 很容易理解

2014-04-15

shell编程 详解

主要 讲解了linux中shell编程的相关内容 基础的语法 等

2014-04-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除