HashMap 中的容量与扩容实现,细致入微,值的一品!

  开心一刻      巴闭,你的脚怎么会有味道,我要闻闻看是不是好吃的,嗯~~爸比你的脚臭死啦!!……  JDK1.8中HashMap的底层实现,我相信大家都能说上来个一二,底层数据结构 数组+链表(或红黑树) ,源码如下/***数组*/transientNode<K,V>[]table;/***链表结构*/staticclassNode<K,V>implementsMap.Entry<K,V>{finalinthash;finalKkey;Vvalue;Node<K,V>next;Node(inthash,Kkey,Vvalue,Node<K,V>next){this.hash=hash;this.key=key;this.value=value;this.next=next;}publicfinalKgetKey(){returnkey;}publicfinalVgetValue(){returnvalue;}publicfinalStringtoString(){retu...

Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现

  开心一刻    小明:“妈,我被公司开除了”,妈:“啊,为什么呀?”,小明:“我骂董事长是笨蛋,公司召开高层会议还要起诉我”,妈:“告你诽谤是吧?”,小明:“不是,他们说要告我泄露公司机密”  不管三七二十一,我们先来看看它的定义,看看spring是如何描述BeanPostProcessor的/**Copyright2002-2016theoriginalauthororauthors.**LicensedundertheApacheLicense,Version2.0(the"License");*youmaynotusethisfileexceptincompliancewiththeLicense.*YoumayobtainacopyoftheLicenseat**http://www.apache.org/licenses/LICENSE-2.0**Unlessrequiredbyapplicablelaworagreedtoinwriting,softw...

Spring MVC的工作原理,我们来看看其源码实现

  开心一刻    晚上陪老丈人吃饭,突然手机响了,我手贱按了免提……哥们:快出来喝酒!哥几个都在呢!我:今天不行,我现在陪老丈人吃饭呢。哥们:那你抓紧喝,我三杯白酒,把我岳父放倒了才出来的,你也快点。看着我老丈人的脸,我不知道该怎么回了……猪一样的队友  在关于利用maven搭建ssm的博客,我们一起来探讨下问的最多的问题中,我遗留了一个问题:Springmvc是何时、何地、如何将Model中的属性绑定到哪个作用域,这里的作用域指的是Servlet的四大作用域;不了解问题背景的可以回过头去看看我的上篇博文。  明确的解答我会放到最后,在解答问题之前,我先和大家一起来捋一捋Springmvc的工作原理。废话不多说,开始我们神秘的探险之旅!  在讲工作原理之前,我们先看一个简单的springmvc(ssm)示例,以及实现的效果  工程代码地址:ssm-web   工程结构与效果如上所示,我们不做过多的探究,我们打起精神往下看本篇的重点  准备-资源的加载与初始化    1、DispatcherServlet静态初始化      Di...

springboot2.0.3源码篇

  开心一刻       女儿:“妈妈,你这么漂亮,当年怎么嫁给了爸爸呢?”    妈妈:“当年你爸不是穷嘛!‘    女儿:“穷你还嫁给他!”    妈妈:“那时候刚刚毕业参加工作,领导对我说,他是我的扶贫对象,我年轻理解错了,就嫁给他了!”    女儿......  应用开发中,当我们的功能模块比较多时,往往会按模块或类别对Spring的bean配置文件进行管理,使配置文件模块化,更容易维护;spring3.0之前,对SpringXMLbean文件进行拆分,例如<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/bea...
IT猿 IT猿·2020-03-27

Spring拓展接口之FactoryBean,我们来看看其源码实现

  开心一刻   那年去相亲,地点在饭店里,威特先上了两杯水,男方绅士的喝了一口,咧嘴咋舌轻放桌面,手抚额头闭眼一脸陶醉,白水硬是喝出了82年拉菲的感觉。如此有生活情调的幽默男人,果断拿下,相处后却发现他比较木讷,问他为什么那天喝水那么有趣,他仰头道:鬼知道那杯水怎么那么烫啊!  FactoryBean的源码比较简单,大家可以细读下其注释,我做了简单的如下翻译/***实现此接口的bean不能用作普通bean。此bean暴露的对象是通过getObject()创建的对象,而不是它自身*/publicinterfaceFactoryBean<T>{/***返回此工厂管理的对象的实例(可能是共享的或独立的,取决于isSingleton()的返回值)*/@NullableTgetObject()throwsException;/***返回此FactoryBean创建的对象类型,*/@NullableClass<?>getObjectType();/***该工厂管理的对象是否为单例?*如果是(returntrue),getObject()总是返回同一个共享的实例,该对象会被...

springboot集成下,mybatis的mapper代理对象究竟是如何生成的

  开心一刻       中韩两学生辩论。    中:端午节是属于谁的?    韩:韩国人!    中:汉字是谁发明的?    韩:韩国人!    中:中医是属于谁的?    韩:韩国人!    中:那中国人到底发明过什么?    韩:韩国人!  Mybatis源码解析-mapper代理对象的生成,你有想过吗,我们讲到了mybatis操作数据库的流程:先创建SqlSessionFactory,然后创建SqlSession,然后再创建获取mapper代理对象,最后利用mapper代理对象完成数据库的操作;Mapper代理对象的创建,利用的是JDK的动态代理,InvocationHandler是MapperProxy,后续Mapper代理对象方法的执行都会先经过MapperProxy的invoke方法。  但是,此时SqlSessionFactory的创建、SqlSession的创建以及mapper代理对象的获取都是我们手动操作的,实际应用中,mybatis往往也不会单独使用,绝大多数都是集成在spring中,也就是说我们无需手动去管理mybatis相关对象的生命周期,全部都由spring...

设计模式之代理,手动实现动态代理,揭秘原理实现

  开心一刻    周末,带着老婆儿子一起逛公园。儿子一个人跑在前面,吧唧一下不小心摔了一跤,脑袋瓜子摔了个包,稀里哗啦的哭道:“爸爸,我会不会摔成傻子!”    我指了指我头上的伤痕安慰道:“不会的,你看,这是爸爸小时候摔的。”    话还没有说话,小家伙哭的更厉害了:“那就是说我长大后就会和你一样傻了,我不要,我不要!”    老婆忍不住发飙:“别哭了,你怎么会变傻呢?你看你爸,你爸傻吗?”    我赶紧回应道:“是啊,你看我多聪明!”    儿子:“真的,不骗我?”    老婆:“当然!”    儿子:“可是如果老爸不是傻子,当年怎么会娶你这个母老虎呢?”    我、老婆:……  所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的左右。  代理模式:...

应用集成mycat,实现mycat的高可用与mysql的读写分离

  开心一刻    一个女人自朋友圈写道:我家老公昨天和别人家的老婆出去旅游,迄今未归,我则被别人家的老公折腾了一天,好累哦!    圈子下面,评论无数,老公在下面评论到:能不能好好说话,我只不过陪女儿去毕业旅游行,而你负责在家留守,照顾三岁儿子,要不要写的这么刺激、让人浮想联翩的?你是不是有点虎?诺维斯基:你往哪射了?周子瑜:我只是个娱乐明星,射箭我不是专业的...  路漫漫其修远兮,吾将上下而求索!  github:https://github.com/youzhibing  码云(gitee):https://gitee.com/youzhibing  通过前面的两篇博文:Mycat-实现数据库的读写分离与高可用和Mycat-高可用与负载均衡实现,满满的干货!,我们完成了如下图所示的组件部署组件结构图一  SQL请求发给VIP,keepalived完成VIP的映射,并通过lvs将请求转发mycat,mycat根据SQL请求类型(DMLSQL还是SELECTSQL,亦或是强制指定db节点)将SQL分发到具体的db,完成由具体的数据库服务完成SQL的执行。  但这还只是停留在数据库层...

keepalived实现mycat高可用问题排查;道路坎坷,布满荆棘,定让你大吃一惊!

  开心一刻    医院里,一母亲带着小女孩打针。小女孩:“妈妈我不想打针,疼!”妈妈:“宝贝儿听话,这里这么多护士阿姨,咱们找个打针不疼的。”小女孩:“那哪个阿姨打针不疼呢?”妈妈:“妈妈也不知道,咱们试试看吧。”小女孩高兴的点了点头。。。  路漫漫其修远兮,吾将上下而求索!  github:https://github.com/youzhibing  码云(gitee):https://gitee.com/youzhibing  Mycat-实现数据库的读写分离与高可用写完之后,本以为一两天就能写完Mycat-高可用与负载均衡实现,满满的干货!,可事实是却用了一个星期;期间虽然产生了一系列的问题,但主要还是卡在了keeplaived实现mycat高可用,那时候两台keepalived服务器的keepalived.conf内容如下  细心的朋友应该已经找到问题了,不管你找没找到问题,都可以准备好花生、瓜子和啤酒,且看我是如何埋雷和扫雷的   个人一直用ifconfig命令来管理...

spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!

  开心一刻    小白问小明:“你前面有一个5米深的坑,里面没有水,如果你跳进去后该怎样出来了?”小明:“躺着出来呗,还能怎么出来?”小白:“为什么躺着出来?”小明:“5米深的坑,还没有水,跳下去不死就很幸运了,残是肯定会残的,不躺着出来,那能怎么出来?”小白:“假设没死也没残呢?”小明:“你当我超人了?那也简单,把脑子里的水放出来就可以漂出来了。”小白:“你脑子里有这么多水吗?”小明:“我脑子里没那么多水我跳下去干嘛?”   路漫漫其修远兮,吾将上下而求索!  github:https://github.com/youzhibing  码云(gitee):https://gitee.com/youzhibing  springboot1.x到2.x变动的内容还是挺多的,而2.x之间也存在细微的差别,本文不讲这些差别(具体差别我也不知道,汗......),只讲1.5.9与2.0.3的redis缓...

elk + filebeat,6.3.2版本简单搭建,实现我们自己的集中式日志系统

  刚从事开发那段时间不习惯输出日志,认为那是无用功,徒增代码量,总认为自己的代码无懈可击;老大的叮嘱、强调也都视为耳旁风,最终导致的结果是我加班排查问题,花的时间还挺长的,要复现问题、排查问题等,幸亏那是公司内部员工用的系统,时间长一点也没什么大问题,但是如果是针对客户的,时间就代表很多东西了,那造成的影响就非常大了。自那以后养成了输出日志的习惯。  但是后来发现,仅仅只是输出日志文件,对于排查问题来说,还是很费时,因为要在一个庞大的日志文件中过滤出我们需要的信息也十分耗时;那么此时基于日志文件的日志系统就被需要了。  至于需不需要搭建日志系统、以及搭建一个怎样的日志系统,需要根据我们的业务实际情况而定,例如公司内部员工用的一个不重要的系统,那么日志文件可能就够了;而对于针对客户的、直接与公司利益挂钩的,我认为不仅要搭建日志系统,更要输出更详细的日志信息到日志文件,提供运维的效率。  elk+filebeat各个组件的功能    Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于ApacheLucene构建,能对大容量的数据进行接近实时的存储、...

Redis Cluster的搭建与部署,实现redis的分布式方案

  上篇RedisSentinel安装与部署,实现redis的高可用实现了redis的高可用,针对的主要是master宕机的情况,我们发现所有节点的数据都是一样的,那么一旦数据量过大,redis也会效率下降的问题。redis3.0版本正式推出后,有效地解决了Redis分布式方面的需求,当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构方法达到负载均衡的目的。  而此篇将带领大家实现RedisCluster的搭建,并进行简单的客户端操作。  github地址:https://github.com/youzhibing/redis  redis版本:redis-3.0.0  linux:centos6.7  ip:192.168.11.202,不同的端口实现不同的redis实例  客户端jedis,基于spring-boot        节点准备    192.168.11.202:6382,192.168.11.202:6383,192.168.11.202:6384,192.168.11.20...

Redis Sentinel安装与部署实现redis的高可用

  对于生产环境,高可用是避免不了要面对的问题,无论什么环境、服务,只要用于生产,就需要满足高可用;此文针对的是redis的高可用。  接下来会有系列文章,该系列是对spring-session实现分布式集群session的共享的完整阐述,同时也引伸出缓存的实现;而此篇是该系列的第一篇。  github地址:https://github.com/youzhibing/redis  redis版本:redis-3.0.0  linux:centos6.7  ip:192.168.11.202,一台服务器上搭建搭建全部redis实例,包括数据节点实例以及哨兵(sentinel)实例  客户端jedis,基于spring-boot  搭建一主二从的主从环境  1、redis安装    安装很简单,网上资料很多,redis官网也有说明;主要就是3步:解压,make,makeinstall  2、数据节点配置文件    redis解压后,redishome目录下有redis配置的样例文件,我们不直接在此文件上就行修改,在redishome目录下新建文件夹master_slave,将配置文件都放于...

flying-saucer + iText + Freemarker实现pdf的导出, 支持中文、css以及图片

     项目中有个需求,需要将合同内容导出成pdf。上网查阅到了 iText , iText 是一个生成PDF文档的开源Java库,能够动态的从XML或者数据库生成PDF,同时还可以对文档进行加密,权限控制,并且还支持Java/C#等,但是iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式让人头大。那么有没有什么方式能够支持css呢,又查阅到了 flying-saucer, flying-saucer也是导出PDF的一种解决方案,并且是基于iText的开源API,并且实现了CSS解析器,能够很好的支持CSS2.1,以及少量的CSS。最终解决方案定为: flying-saucer + iText +  Freemarker。  流程如下  pom.xml<projectxmlns="http://maven.apache.org/POM/4...

spring-session实现分布式集群session的共享

  HttpSession是通过Servlet容器创建和管理的,像Tomcat/Jetty都是保存在内存中的。但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被分发到多个不同的应用中。那问题来了,如何保证不同的应用能够共享同一份session数据呢?最简单的想法,就是把session数据保存到内存以外的一个统一的地方,例如Memcached/Redis等数据库中。那问题又来了,如何替换掉Servlet容器创建和管理的HttpSession的实现呢?  1、利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略。这方面其实早就有开源项目了,例如memcached-session-manager(可以参考负载均衡+session共享(memcached-session-manager实现),以及tomcat-redis-session-manager。不过这种方式有个缺点,就是需要耦合Tomcat/Jetty等Servlet容器的代码。  2、设计一个Filter,利...
首页上一页...537538539540541...下一页尾页