- 博客(21)
- 收藏
- 关注
原创 机器语言到Java语言的技术背景
1.概述学习Java三年了,从一开始C语言的hello world,到Java的程序设计,迷茫过也思考过,总的来说前进方向是正确的,今天写下的内容主要包括个人历程和技术心得体会。2.计算机体系作为一个科班出身的程序员,其实和其他刚入门的小白一样,对hello world的程序打印充满好奇和不解,这就是编程?why so easy?why我们的程序和日常看到的软件不一样?为什么我们平时看到的QQ页面花里胡哨,hello world程序只有一个黑色的输出窗口?要讲明白上面所述的东西,得从最古老得电路板说起
2020-12-24 18:39:58 403 1
原创 spring 生命周期
引入前文提过spring把我们开发的业务类转换成Bean的治理,然后把生成的代理对象存活于应用当中向外提供调用服务,而对于Bean中存在的配置信息,例如配置单例还是多例,配置切面编程,配置初始化方法,配置的自动注入属性等等,都是在spring容器中refresh方法中解析配置信息并根据配置信息拦截Bean生命周期的每一个阶段来做对应处理。所以spring其实已经把Bean生命周期的每一个阶段以接口方式或以xml方式暴露给用户,用户从而可以介入Bean生命周期的每一阶段,并完成对应的逻辑。BeanFact
2020-06-30 15:32:02 428
原创 Java核心篇之NIO和BIO原理分析
IO篇之前置知识1.IO指输入输出1)输入输出(IO)针对的是数据,而数据输入口和输出口一般指硬盘和网卡2)输入是指把硬盘和网卡的数据,读取到内存,以便CPU进行数据处理(机器指令+数据)3)输出是指把内存中的数据,写到硬盘和网卡中,以遍持久化和网络传输2.操作系统与IO的关系1)操作系统运行程序有两种类型:内核程序和用户程序2)内核程序理解为:操作硬件的驱动程序,例如读写硬盘和网卡的系统接口(安全考虑,用户程序不能直接操作硬件)3)用户程序理解为:JVM进程,QQ程序等等,用户程序需要硬件
2021-04-20 00:18:43 343
原创 Java核心篇之JVM战场
JVM前置知识1.JVM是一个字节码指令执行引擎1)类似计算机的cpu,cpu就是机器指令的执行引擎2)注意:JVM是编译后的class文件指令的执行引擎,而不是java文件源程序的执行引擎3)所以,JVM可以服务于Java以外的编程语言,只要编程语言编译出来的指令文件符合字节码指令规范2.CPU和JVM的关系1)CPU是机器指令的执行引擎2)JVM是C语言写的,JVM也可以理解为C程序,其运行之前需要编译成机器指令3)启动JVM,就可理解为CPU执行机器指令(JVM编译后的机器指令)3.
2021-04-14 20:33:22 188
原创 多线程之线程池原理分析
线程池存在的意义1.线程池保持着一定数量的线程一直活着,这样可以避免高频率的创建和销毁线程1)创建和销毁一个线程都会有两个动作:给线程申请和回收内存上下文空间;以及需要cpu为线程执行2)创建线程过多:计算机的内存空间会被大量的线程上下文占用;cpu无法及时处理每个线程任务,实时性降低3)创建线程过少:cpu容易因为大部分线程阻塞而导致cpu空闲等待(例如磁盘IO和网络IO阻塞)4)基于以上原因,计算机维持一定数量的线程才能充分而高效的让系统调度计算机的资源5)在高并发场景,如果短时间内创建和销
2021-04-11 03:34:49 339
原创 redis设计与实现
redis的本质1.一台远程服务器,通过sokect连接客户端,并向客户端提供缓存服务(缓存的数据结构类似Map)2.为什么客户端不在本地用Map缓存数据,而需要一台独立的服务器做缓存?1)因为分布式和集群概念兴起,一个应用,需要多台服务器协同工作,多台服务器意味着多个JVM2)多个JVM意味着跨JVM,跨JVM意味着我们要如何保证不同JVM的本地缓存数据保持最终一致性?3)为了绕开这个问题,redis另起炉灶做了个客户端共用的缓存服务器,并向多个客户端提供缓存服务4)缓存服务器就类似一个远程M
2021-04-08 23:47:50 331
原创 Java多线程之锁原理分析
Synchronized的锁原理1.Synchronized锁是JVM层面帮我们实现的一种加锁机制1)Synchronized锁常用于锁定一段代码范围,然后该段代码就可支持多线程安全修改共享变量2)当加了Synchronized锁的代码被编译成字节码时,Synchronized锁住指令的前后会增加两条指令3)既monitorenter 和 monitorexit,当JVM运行字节码指令时,碰到这两条指令,就会做线程同步4)线程同步时,需要记录那个线程正在占用被锁定的代码块(也称指令块),那些线程正
2021-04-06 01:54:44 399
原创 集合篇之Map知识结构
HashMap继承于AbstractMap,实现了Map接口1.HashMap的核心属性:capacity,loadFactor,threshold,size,table,three_threshold1)HashMap核心原理是数组+链表或红黑树(JDK1.8)2)capacity:该属性就是初始化数组之后的最大长度3)loadFactor:加载因子,是一个小数,一般和capacity组合计算出一个新值(扩容阀值)4)size:当前存入数据节点的总个数5)threshold:扩容阀值,数组扩容
2021-04-04 15:28:08 230 2
原创 spring涉及的重要后置处理器和生命周期接口
与ApplicationContext容器共生的后置处理器(重要)1.ConfigurationClassPostProcessor :处理加了@SpringBootApplication注解的启动类2.AutowiredAnnotationBeanPostProcessor:完成Bean的@Autowired注解的自动注入功能3.CommonAnnotationBeanPostProcessor:完成Bean的@PostConstruct,@PreDestroy,@Resource注解的功能Con
2021-04-02 01:31:53 254
原创 spring事务和AOP原理剖析
spring事务(springBoot2.0默认走CGlib代理)1.EnableTransactionManagement1)注解上标了注解Import,导入了TransactionManagementConfigurationSelector类,类实现了AdviceModeImportSelector接口2)该接口导入了两个类AutoProxyRegistrar和ProxyTransactionManagementConfiguration3)注册类AutoProxyRegistrar实现了Im
2021-03-30 23:59:42 440
原创 springBoot核心技术揭秘
SpringBootApplication组合注解1.SpringBootConfiguration注解1)注解内部没有多余的属性,只有另一个注解Configuration2)Configuration注解,标在类上,表明类可注入对象到容器,注入方式有三种3)类中方法可与Bean注解使用,方法直接返回实例化出来的对象,对象会直接进入容器4)类上可添加Import注解,注解上导入的字节码可注入进容器5)类上可添加ComponentScan注解,注解指定包下的类可被扫进容器2.EnableAuto
2021-03-29 14:48:36 560 2
原创 spring顶级接口介绍
BeanFactory1)BeanFactory是一个Bean的顶级工厂接口,定义了最简单的单个Bean操作接口2)HierarchicalBeanFactory继承于BeanFactory定义了访问父BeanFactory的接口3)ListableBeanFactory继承于BeanFactory定义了统计(也可译为可列表)和操作多个Bean对象的接口4)AutowireCapableBeanFactory继承于BeanFactory定义了创建Bean到初始化Bean的部分接口(与部分Be
2021-03-22 15:59:50 745
原创 mysql面试专题
mysql总体执行流程1.服务器通过socket,接到一条查询sql,先从bufferPool查询,若有直接返回结果2.若没有,服务器会使用sql解析器编译,生成可执行的解析树3.生成的解析树进入预处理器,预处理器会校验解析树的语法规则以及执行权限4.校验完成,解析树进入优化器,优化器会确定执行索引和替换等价操作,最终生成执行计划5.最后服务器会调用存储引擎的api并把执行计划作为参数传递过去explain关键字1.explain可查看优化器生成的执行计划(计划上展示了执行逻辑和索引信息)
2021-03-18 17:57:18 132
原创 mybatis3源码分析
1.原生JDBC查询编写sql–》预编译sql–》参数设置–》执行sql–》结果封装2.半自动框架与Hibernate不同,Hibernate是全自动映射框架,目的是消除sql,但是消除sql的同时,Hibernate又失去了灵活性和sql优化空间,尽管提出了一个HQL概念,但是又增加了学习成本。所以,mybatis在这种背景下发展起来的,mybatis选择不封装sql编写操作(mapper.xml文件),封装其他JDBC操作,追求的是封装性,又不失sql灵活性。3.mybatis前言与所有框架
2021-03-15 14:43:16 286
原创 mysql隔离性原理
1.修改覆盖两个事务修改数据,1和2同时读到同一个数据,修改晚的事务会覆盖前一个事务的修改。解决方案:针对两个事务写写场景,写时加写锁,后一个事务可读不可写*(读未提交)*2.读脏数据(读未提交)一个事务读到另一个事务的修改结果,但是修改的事务还没提交,还没提交的事务可回滚。解决方案:针对两个事务写读场景,写时加读锁加写锁,后一个事务不可读不可写*(读已提交)*3.不可重复读(读已提交)一个事务读两次同一个数据,查询结果却不一致。解决方案:针对两个事务读写读场景,读时加读锁,写时加读锁加写锁
2021-03-11 10:48:47 294
原创 Java后台项目的顶层设计思路
设计初衷1.抽象单表的增删查改功能。2.设计一套适用于大部分项目的开发规范。3.提供一套通用的日志处理和异常处理方式。4.通用功能强大并保持可扩展,与业务无关。设计原则1.代码简单易懂(只抽象单表的分页查询,列表查询,删除,新增,编辑,详情功能)2.接口高度可扩展(大部分后台项目可以基于此进行二次开发)3.规范开发(提供一套适用于大部分后台项目的规范)demo走马观花1.controller入口...
2020-07-23 18:26:31 758
原创 spring environment引入
environment简介在spring中,environment是当前spring应用运行环境的一个抽象,里面保存了当前系统的信息,当前JVM的信息以及当前被激活的配置文件信息。environment内部结构environment对象更像是一个各种配置信息的一个持有者,外部可以通过该对象获取到各种配置的信息,里面主要包括这几个内部引用:PropertySource:类似Map,但没有put功能,只能从里面get数据,代表每个配置文件的一组配置属性,在environment中是以MutablePr
2020-06-29 10:54:03 557
原创 spring解析XML中的Bean
关于Bean的理解spirng伟大之处在于自定义了一个Bean的概念,在这个概念拓展出来了一套类的治理理念,包括Bean的生命周期,IOC,AOP等一系列概念,而spring想接管我们业务类的治理,第一步就是扫描出包下所有的业务类,早期spring是通过xml配置,后期就是通过注解方式配置。BeanDefinition的作用spring会在启动的时候,把所有类的类全名,类的配置属性都会扫描到内存中,以方便后面实例化对象的时候不用每次到xml文件里面进行IO读取,这一步也就是传说中的xml解析,解析到的
2020-06-23 14:20:03 771
原创 SpringMVC设计原理分析
Spring启动简介在Spring早期得配置中,我们都需要显式地在web.xml配置ContextLoaderListener监听器,该类实现了接口ServletContextListener,实现了该接口的类会在tomcat启动时进行调用,其中关键的方法有contextInitialized()和contextDestroyed()。从ContextLoaderListener进入Spring初始化流程1.tomcat启动调用ContextLoaderListener.contextInitial
2020-06-23 11:01:48 273
原创 SSLException: Received fatal alert异常引发的思考
出现问题的背景我们公司和其他公司有业务往来,我们需要调用他们的Https的接口,前期测试调用他们的接口一切正常,后期对接的过程中,他们升级了JDK版本,然后Java接口崩了,调试发现控制台打印出SSLException: Received fatal alert: 信息,然后开始进入了百度和谷歌之旅。问题出现转机茫茫的博客看得一头雾水,尽管做尽尝试,没一篇能解决得了我当前遇到的问题,直到这篇博客出现在眼前https://www.jianshu.com/p/acbfea5ec597,脑袋了多了一份思考,
2020-06-19 09:59:50 4249 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人