自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 设计模式为什么能让程序代码更加优秀?

作为一名程序员,我们特别擅长用编程语言实现一个个系统功能。但是我们非常头疼产品同学一次次提出的需求变更。因为需求变更会导致程序员对已有代码进行改造,如果是自己的代码还稍微好一些,要是改他人的代码,估计心中一定有无数奔腾的草泥马。为什么维护老代码会这么的痛苦呢?

2019-07-17 11:32:02 246

原创 为什么数据结构总是成为程序员的噩梦?

目录 前言结构和关系结构的变化数据结构查找排序总结知识点总结 前言 每次自己回想起大学上《数据结构》课程的时候,都感觉像是一场噩梦。脑海中浮现的都是复杂的数学公式、看不懂的C语言算法、抽象的递归等等。大学为了学分也只能硬着头皮完成了考试,然后就没有然后了,完全没记住学了些什么。工作以后,增删改查的业务模块中几乎没有看到数据结构中那些复杂的算法。于...

2019-07-10 10:18:23 446 1

原创 计算机简史:从计算器到手机

序言计算机(特别是手机)已经改变了人们的生活方式,但是我们却很少关心计算机底层原理。计算机是什么? 计算机是怎么来的? 程序是怎么在计算机中运行的?有句名言:“不认识整体就不可能认识局部”。程序员为了更好的掌握编程技术,应该对计算机体系有全面的了解。所以通过讨论计算机的发展简史,来回答刚刚上面提到的问题。讨论内容:为什么要发明计算机? 计算机发明过程。 计算机发展...

2019-06-17 15:01:44 749

原创 技术理论-【socket】- 计算机网络

- 计算机网络是计算机之间建立的通信网络。- 通信网络是个体之间传递信息的网络,比如邮政网络、快递网络、手机网络。- 计算机信息是通过网络设备进行传输。- 计算机信息是二进制的数字信息。- 计算机在网络中需要用IP作为身份标识。- 计算机中有多个应用,端口是应用在网络中的标识。- 应用拥有多个资源,URI是应用资源的标识。- URI(统一资源标志符)分为URL(统一资源定位符)和URN(统一资源名称)。- 计算机网路分为局域网和互联网。- 局域网是封闭的私有网络,私有IP

2019-06-14 09:11:49 159

原创 技术理论-【Thread】- java线程知识总结

1. 创建状态(NEW):创建一个线程对象。2. 运行状态(RUNNABLE):线程启动后,争取或者获得CPU使用权。3. 死亡状态(TERMINATED):线程逻辑(run方法)运行完毕。4. 时间等待状态(TIME_WAIT):等待指定时间后(sleep/join/yield),才能争取CPU使用权。5. 等待状态(WAIT):等待别人唤醒(notify)。6. 阻塞状态(BLOCK):获取同步锁失败,等待别人释放锁。

2019-06-11 11:02:07 206

原创 技术理论-【JVM】-04-调优实验

实验内容实验案例堆的大小;堆的新生代和老年代比例;堆的新生代中Eden和Survival区比例;java对象的成年标准;方法区大小;内存溢出;手动触发GC;指定垃圾回收器;实验参数//堆总内存大小-Xmx500m//堆初始化内存大小-Xms500m新生代和老年代内存分配比例-XX:NewRatio=4新生代的Eden和Survival的比值(Eden:Fro...

2019-05-31 16:34:57 191

原创 技术理论-【JVM】-03-堆实现分代算法

分代算法背景JVM中堆是存放java对象的地方,也是内存管理的核心对象。前面在垃圾收集器中已经介绍了GC会带来2个问题,“碎片问题”和“效率问题”,为了解决这两个问题,人们不断的再优化垃圾回收算法,已经介绍了常用的引用计数、标记清除、复制、标记整理。现在让我们来研究JVM当前采用的最优算法 ,分代算法。理论首先引入了java对象年龄的概念,每次GC操作作为一年,存活下来的对象年龄都+1...

2019-05-30 17:14:36 352 2

原创 技术理论-【JVM】-02-垃圾回收器

GC核心概念垃圾回收器是负责JVM中java堆的内存管理组件。内存回收会产生两个问题:效率问题和碎片问题。效率问题是因为JVM在垃圾回收的时候将暂停java程序运行。碎片问题是因为垃圾回收后内存可用空间不连续。下面的学习内容就是围绕着两个问题来展开。效率问题GC回收堆内存的时候,java线程将被暂停执行,就会造成程序卡顿现象。虽然JVM的垃圾收集器一直在优化算法,但是目前还没法根...

2019-05-28 17:05:39 151

原创 技术理论-【JVM】-01-基础概念

学习背景JVM(Java Virtual Machine)是运行java程序的程序。为什么要用java语言来开发程序呢?面向对象语言;“一次编译,到处运行”(跨平台);自动垃圾回收机制;丰富的第三方工具库计算机只认识机器指令,但是机器指令写的程序可读性非常差,于是人们发明了高级语言(比如C、C++、JAVA等),使得程序的可读性更高和编程更容易。但是高级语言程序需要增加编译工作...

2019-05-28 14:49:57 161

原创 CSS技术概要总结

CSS的背景知识为什么需要css技术?咱们需要看看css是处在一个什么样的技术位置,web的html页面需要浏览器进行访问,而浏览器又是运行在操作系统上的,操作系统又是运行在不同的硬件设备上的,所以css的技术需要一些基础背景知识:硬件设备、操作系统、浏览器、html、js。为什么需要把角度上升到硬件设备这一层呢?因为手机和显示器的硬件分辨率不一样,会存在尺寸兼容问题,所以界面上展示的尺寸单...

2019-03-04 14:11:52 5664

原创 架构小白到砖家-19-【应用脚手架问题】-eclipse整合maven archetype

应用框架的搭建需要一定工作量,我们每次开发新应用都手动搭建一遍,或者耐心的慢慢copy现有应用,这个工作确实不是一件愉快的事情。我们需要一个应用脚手架,每次新应用只需要一个引导界面,填写项目基本名称信息,就可以完成框架的搭建工作。maven正好提供了这种解决方案,我们在创建maven工程的时候,就有很多archetype模板可以选择,并IDE有图形化的引导工具。那我们就来看看如何创建mav...

2019-01-21 17:44:42 544

原创 架构小白到砖家-18-【session共享问题】-springsession+redis实现共享session

咱们已经完成了单应用框架的整合工作,可以满足开发工作需求了,应用在上线部署之前,咱们还要解决一个系统高可用问题,需要将应用部署成集群。但是集群会引发一个新的问题,那就是用户登录使用系统,会在每个集群节点都有一个session,会导致我们无法跟踪用户会话信息。所以就需要把session进行集中管理,来解决集群session共享的问题。spring已经提供了比较好的解决方案springsessio...

2019-01-18 13:53:39 143

原创 架构小白到砖家-17-【密码安全问题】-springsecurity整合密码加密机制BCryptPasswordEncoder

用户认证需要验证用户的密码是否正确,但是为了保护用户隐私,防止用户账号密码泄露,用户在注册的时候,都需要将密码进行加密。那么在用户认证的时候,就需要将原始密码和加密密码进行验证。这样就需要注册加密和验证加密的方式保存一致。我们就补充下加密的概念,前面咱们已经在数据库密码加密时,学习了对称加密和非对称加密的概念,知道了私钥和公钥的作用。不管是对称还是非对称加密,都是可以将密码还原成真实信息。用户的...

2019-01-17 15:26:32 3125

原创 架构小白到砖家-16-【权限管理问题】-springsecurity处理动态权限验证

权限管理也面临数据存储同样的动态处理问题,默认security都是使用提前配置权限设置,或者使用注解控制方法权限,但是这就造成了硬编码的问题,实际生产中权限是根据业务要求进行动态调整的。为了解决硬编码问题,就需要动态获取权限信息。权限信息包含两部分信息,用户拥有权限和资源访问权限。用户拥有权限,在登录的时候是可以动态进行加载的。资源访问权限,如果使用security默认的java代码配置方...

2019-01-17 10:32:00 574

原创 架构小白到砖家-15-【权限管理问题】-springboot整合springsecurity

我们已经掌握了权限管理理论,核心就是用户认证和用户授权。那么我们就来学习springsecurity如何解决这两个问题。springboot整合springsecurity比较简单,pom中引入直接使用starter相关的jar。 <!-- spring boot security --> <dependency> <groupId>org.s...

2019-01-16 13:18:59 247

原创 架构小白到砖家-14-【权限管理问题】-权限管理理论

目前为止咱们的应用所有人都是可以自由访问的,但是有些功能不能让所有人使用,那么咱们就必须处理应用权限管理问题。权限管理分为两部分,用户认证(Authentication)和用户授权(Authorization)。用户认证解决访问用户的合法身份问题,用户授权解决访问资源是否有权限问题。咱们应用是web应用,所以访问资源是URL请求。从技术层面使用拦截器对所有应用请求进行拦截,然后进行权限管理操...

2019-01-16 11:11:49 512

原创 架构小白到砖家-13-【密码安全问题】-springboot整合druid加密

应用不光保障功能完整性就可以了,还需要保障信息安全,所以我们还需要关注如何隐藏应用敏感信息的问题。数据库的账号密码就是这种信息,我们需要对其进行加密处理。正好druid又提供了非常好用的加密方案,让我们来看看如何使用吧。我们首先需要补充点加密的概念,加密有两种方式(对称加密和非对称加密),对称加密就是一个秘钥进行加密和解密;非对称加密是一个秘钥对,分为私钥解密,公钥加密。显然非对称加密要更加安全...

2019-01-11 14:57:21 910

原创 架构小白到砖家-12-【应用日志问题】-使用logback

应用在运行过程中,遇到生产问题是常有的事情,这种情况下,咱们需要获取应用当时发生问题时的运行信息,来帮助我们排查问题原因。那么如何保持应用运行信息呢?就需要引入日志机制。目前日志工具已经很多了,咱们就采用springboot推荐的logback。那么我们先来log日志的基本概念,我们创建一个logger来使用日志工具,另外日志定义了四种日志级别(debug、info、error、warn),下面...

2019-01-11 10:35:30 163

原创 架构小白到砖家-11-【数据库监控问题】-打开druid的监控封印

单应用框架终于解决了用户请求问题和数据存储问题,日常生产运营过程中随着业务发展,应用的性能将经受一个比较大的考验,而数据库SQL性能是在数据量增长过后,最容易产生查询性能问题。为了方便大家快速定位问题SQL,所以对应用执行的SQL进行实时监控就很有必要了。当然也可以让运维同学帮忙直接去数据库端排查日志,但是这样的方式笨拙而且效率很低,不太符合咱们程序员独立解决问题的风格。还好咱们选择了一个比较优秀...

2019-01-11 09:39:03 155

原创 架构小白到砖家-10-【数据存储问题】-JpaRepository支持原生sql操作

俗话说金无足赤,人无完人,jpa作为一个存储层技术方案肯定也有不完美的地方,在多表模型和特殊数据库操作方面,还是需要传统sql来进行处理。那么咱们就继续讨论如何通过jpa来实现原生sql的支持?jpa已经提供了JpaRepository的默认实现类SimpleJpaRepository,咱们现在想自定义方法来扩展JpaRepository,就只能写一个自定义BaseRepository接口继承它...

2019-01-10 14:43:17 516

原创 架构小白到砖家-09-【数据存储问题】-ORM框架和纯SQL的对比

通过前面对jpa提供的JpaRepository和JpaSpecificationExecutor两种面向对象数据库操作研究,已经解决了绝大多数开发工作中单表对象化操作。这两种解决方案确实都非常优雅,省去了写SQL的烦恼,甚至连接口的实现类都不需要我们去写了。但是我们心中更加好奇,jpa难得真的就能将数据库概念给抹杀掉了吗?让我们带着疑问,再继续整理一下,还有什么数据库使用场景咱们没有讨论到。...

2019-01-10 12:11:58 677 3

原创 架构小白到砖家-08-【数据存储问题】-JpaSpecificationExecutor解决单表动态查询

接着上一篇的疑问,难道jpa真的就能无敌到能解决所有sql查询的情况吗?这次终于有否定的答案了,还是不行的。让我们在看看jpa怎么实现自动查询的。 User findByRealName(String realName); User findByUsernameOrEmail(String username,String email);可以看到我们是在接口中声明的方法,是的,也就是说这些查...

2019-01-10 10:00:07 173

原创 架构小白到砖家-07-【数据存储问题】-JpaRepository解决单表固定查询

终于把用户请求问题处理完毕了,接下来可以解决web应用第二个问题,数据存储问题。咱们在应用框架发展历史中已经知道了,数据存储框架经过了纯JDBC,到EJB重量级框架,在到springAOP切面编程+spring的轻量级容器,然后到ORM框架hibernate,最后到JPA统一ORM标准。那么springJPA到底是怎么使用呢?根据面向对象编程思想,java操作数据库,应该使用对象操作的方式,而...

2019-01-09 15:48:59 469

原创 架构小白到砖家-06-【界面渲染问题】-整合模板引擎thymeleaf

浏览器和应用怎么发送请求和传递参数,咱们是掌握了,好像平时我们经常访问的网站,应用返回的内容都非常丰富,怎么才能让咱们的应用也能做到呢?我们需要先看看http全称叫超文本传输协议,也就是说http协议本身是能够传输大量信息。另外在web应用的世界里面,为什么是使用浏览器作为web应用访问工具呢?而不是传统应用QQ一样,使用之前还需要先安装一个软件呢?(当然QQ也是有web版本的)。这其实就是w...

2019-01-09 13:53:34 192

原创 架构小白到砖家-05-【用户请求问题】-springmvc接收请求

springboot工程已经创建好了,咱们的前期准备工作算是告一段落,下面将开始真正的进行单应用技术研究工作。咱们再回顾一下,web应用解决的第一个大问题,“处理用户业务请求接收问题”。springmvc是一个专门解决这个问题的框架,并且使用的URL的自动解析规则,不用维护像struts那样庞大的配置表,并且这样做还有一个好处,可以利用URL和http的技术实现RESFul风格的请求处理方式,让请...

2019-01-09 11:00:01 151 2

原创 架构小白到砖家-04-【实际案例】-创建springboot工程

咱们已经知道了java的web应用使用springboot来搭建框架,并且也明白了它的使用方法就是配置信息,那么接下来咱们就开始web应用之旅吧。使用eclipse创建一个java的web工程,这里采用maven来管理项目结构,因为springboot也是使用maven方式来写的demo,maven的知识这里就先不讨论,后续再慢慢补充。首先告诉maven我们需要的jar,咱们web应用框架需要...

2019-01-08 17:21:48 124

原创 架构小白到砖家-03-【应用配置信息问题】-利用springboot配置机制

经过web应用的发展过程,我们已经确定使用springboot就可以搭建一个web应用的开发框架了。如何使用springboot呢?springboot是一个java技术的web应用框架最佳实践,核心思想就是约定优先。什么是约定优先呢?就是相关技术的使用方法进行了统一规范,大家不要有个性化的方式,这样我们只需要按要求配置好框架需要的基本信息就可以了。所以使用springboot就学习它的配置规范...

2019-01-08 14:59:20 154

原创 架构小白到砖家-02-【单应用系统框架发展过程】-为什么使用springboot?

web应用开发经历了很久的发展,已经越来越复杂了,为了更好的搭建应用框架,还是在梳理下历史发展过程。web应用开发语言就很多,这里只讨论java方案的历史。web应用的基本原理是浏览器和web应用之间的通信。相当于两个人(浏览器和web应用)使用写信的方式来进行交流,邮差(http协议)来将信件在两人之间传递。信件的查看和书写需要借助一些工具(html、css、js)。web应用使用java定义...

2019-01-08 11:41:59 229

原创 架构小白到砖家-01-前言

首先梳理下单应用框架的核心技术,主要解决两大问题,用户请求处理和数据存储,将确定应用框架基础为什么使用springboot?springmvc如何解决用户请求问题,并通过thymeleaf模板引擎渲染复杂用户界面的HTML。再分析springjpa怎么实现数据存储方案。然后补充单应用实际生产运营过程中,为了优化性能、解决安全问题、快速处理生产问题、运维部署等模块。最后就是一些比较抽象的设计模式、系统架构、代码重构、云服务等编程思想。

2019-01-07 15:07:36 126

空空如也

空空如也

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

TA关注的人

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