![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 92
Java程序员-张凯
这个作者很懒,什么都没留下…
展开
-
RestFul API 统一格式返回 + 全局异常处理
一、背景在分布式、微服务盛行的今天,绝大部分项目都采用的微服务框架,前后端分离方式。前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。所以统一接口的返回值,保证接口返回值的幂等性很重要,本文主要介绍博主当前使用的结果集。二、统一格式设计2.1 统一结果的一般形式示例:{ # 是否响应成功 success: ...转载 2020-03-25 07:49:19 · 2616 阅读 · 0 评论 -
告别编码5分钟,命名2小时!史上最全的Java命名规范参考!
简洁清爽的代码风格应该是大多数工程师所期待的。在工作中笔者常常因为起名字而纠结,夸张点可以说是编程5分钟,命名两小时!究竟为什么命名成为了工作中的拦路虎。每个公司都有不同的标准,目的是为了保持统一,减少沟通成本,提升团队研发效能。所以本文中是笔者结合阿里巴巴开发规范,以及工作中的见闻针对Java领域相关命名进行整理和总结,仅供参考。一、Java中的命名规范好的命名能体现出代码的特征,含...转载 2019-12-09 14:56:56 · 2016 阅读 · 0 评论 -
String和StringBuffer的区别
JAVA 平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。...原创 2019-11-29 19:34:23 · 2037 阅读 · 0 评论 -
面向对象编程基础
对象构成了一组数据结构及其处理方法。具有相同行为的对象被分类为类。内部细节被类的封装所隐藏。类的专门化和泛化是通过继承实现的,基于对象类型的动态赋值是通过多态实现的。。。。 程序是指令的集合:我们在程序中编写的语句在执行时变成一个或多个指令,然后由CPU执行。 为了简化程序设计,我们引入了函数的概念,将相对独立且经常重复使用的代码放入函数中,当这些函数需要使用时,我们只需要调用函数;如...原创 2019-11-24 15:42:42 · 846 阅读 · 0 评论 -
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?
之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下:那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率如何吧(JDK版本为 jdk1.8.0_201)。package com.wupx.demo;/** * @author wupx * @date 2019/10/23 */p...原创 2019-10-25 20:42:38 · 903 阅读 · 1 评论 -
Java编程配置思路详解
SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官方提供的starter好。上周因为工作和装修的事情,导致博客没有正常更新,害怕停更会让人懒惰起来,挤了一点时间写了一篇内容比较简单的文章。后面闲谈一下我是如何从装修小白到入门的经历。技术:Configuration,Compo...原创 2018-03-30 21:22:35 · 634 阅读 · 0 评论 -
十大经典排序算法最强总结(含Java代码实现)
最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在“桶排序”算法中对每个桶进行排序直接使用了Collection.sort()函数,这样虽然能达到效果,但对于算法研究来讲是不可以的。所以我根据这几天看的文章,整理了一个较为完整的排序算法总结,本文中的所有算法均有JAVA实现,经本人调试无误后才发出,如有错误,请各位前辈指...原创 2018-03-26 15:01:57 · 696 阅读 · 2 评论 -
聊聊阿里Java面试的三个层次
最近去阿里的菜鸟国际做了一次面试交流,发现大公司对于面试者的知识结构考核非常严谨,可以作为我们日常工作学习的指导。虽然很多人说面试问到的东西在实际工作中很少用到,甚至有「面试造火箭,工作拧螺丝」的说法。但从面试中,其实可以看得出来现在的公司对于面试者的知识体系要求。如果我们能在工作中就按着这样的要求去不断提升,那么在面试的时候必然也能游刃有余。一般来说,阿里的面试会有两轮的技术电面,分别交叉检验你...原创 2018-04-09 10:38:34 · 1941 阅读 · 0 评论 -
Java系统高并发的解决方案
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是...原创 2018-04-10 08:57:31 · 532 阅读 · 0 评论 -
Java线程异常终止
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 设置当线程由于未捕获的异常突然终止而调用的默认处理程序,并且没有为该线程定义其他处理程序。 我们开发工程中经常使用到线程,在线程使用上,我们可能会有这样的场景:伴随这一个业务产生一个比较耗时的任务,而这个业务返回并不需要等待该任...原创 2018-04-10 21:36:35 · 4894 阅读 · 1 评论 -
Java异常处理的误区和经验总结
前言本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。误区一、异常的选择图 1 描述了异常的结构,其实我们都知道异常分检测异常和非检测异常,但是在实际中又混淆了这两种异常的应用。由于非检测异常使用方便,很多开发人员就认为检测异常没什么...原创 2018-04-10 21:37:31 · 271 阅读 · 0 评论 -
大型网站系统架构的演化
前言 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的...原创 2018-03-28 15:05:02 · 352 阅读 · 0 评论 -
Java 小记 — RabbitMQ 的实践与思考
前言本篇随笔将汇总一些我对消息队列 RabbitMQ 的认识,顺便谈谈其在高并发和秒杀系统中的具体应用。1. 预备示例想了下,还是先抛出一个简单示例,随后再根据其具体应用场景进行扩展,我觉得这样表述条理更清晰些。RabbitConfig:@Configurationpublic class RabbitConfig { @Bean public Queue callQueue(...原创 2018-04-17 10:38:43 · 628 阅读 · 0 评论 -
Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下。1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中。其中,所有输入流类都是抽象类InputStream(字节输入流),或者抽象类Reader(字符输入流)的子类;而所有输出流都是抽象类OutputStream(字节输出流)或者Writer(字符输出流)的子类。【首先需要明白的是:流是干什么的???(为了永久性的保存...原创 2018-04-22 12:57:09 · 297 阅读 · 0 评论 -
Java 线程池原理分析
1.简介线程池可以简单看做是一组线程的集合,通过使用线程池,我们可以方便的复用线程,避免了频繁创建和销毁线程所带来的开销。在应用上,线程池可应用在后端相关服务中。比如 Web 服务器,数据库服务器等。以 Web 服务器为例,假如 Web 服务器会收到大量短时的 HTTP 请求,如果此时我们简单的为每个 HTTP 请求创建一个处理线程,那么服务器的资源将会很快被耗尽。当然我们也可以自己去管理并复用已...原创 2018-04-18 19:03:45 · 398 阅读 · 0 评论 -
MyBatis 框架系列之基础初识
1、什么是 MyBatisMyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。Mybatis 通过 xml 或注解的方式...原创 2018-04-19 14:56:33 · 328 阅读 · 0 评论 -
购物车的原理及Java实现(仿京东实现原理)
今天来开始写一下关于购物车的东西, 这里首先抛出四个问题:1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭浏览器再打开后 不登录用户名和密码 问:购物车商品还在吗? 3)用户登陆了用户名密码,添加商品, 关闭浏览器,然后再打开,登陆用户名和密码 问:购物车商品还在吗?4)用户登陆了用户名密码,添加...原创 2018-04-24 09:45:29 · 19829 阅读 · 3 评论 -
【关于封装的那些事】 缺失封装
缺失封装没有将实现变化封装在抽象和层次结构中时,将导致这种坏味。表现形式通常如下:客户程序与其需要的服务变种紧密耦合,每当需要支持新变种或修改既有变种时,都将影响客户程序。每当需要在层次结构中支持新变种时,都添加了大量不必要的类,这增加了设计的复杂度。为什么不能缺失封装?开闭原则(OCP)指出,类型应对扩展开放,对修改关闭。也就是说应该通过扩展(而不是修改)来改变类型的行为。没有在类型或层次结构中...原创 2018-05-02 10:03:34 · 1159 阅读 · 0 评论 -
Java就业指导
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写到你的简历中,当然更需要的是你在面试的时候向面试官展示这些专业技能。相信此文对正在寻觅Java程序员(Java工程师)职位的freshman以及希望成为中高级Java开发者的junior都会有所帮...原创 2018-05-02 10:13:28 · 1036 阅读 · 1 评论 -
Spring总结以及在面试中的一些问题
1.谈谈你对spring IOC和DI的理解,它们有什么区别?IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架DI:Dependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对...原创 2018-04-20 14:55:44 · 1009 阅读 · 0 评论 -
Java 常见的 30 个误区与细节!
1、在Java中,没有goto语句。因为大量使用goto语句会降低程序的可读性和可维护性,所以Java语言取消了goto的使用。同时,为了避免程序员自行使用goto所带来的混乱,Java语言仍将goto定义为一个关键字,但是没有定义任何语法,故称为“保留字”。2 true、false和null在IDE中虽然以不同的颜色显示,但是并不是关键字,而是“字面常量”,就和String类型的abc一样。...原创 2018-04-21 10:24:58 · 348 阅读 · 0 评论 -
Java Web分页功能详解
分页简介分页功能在网页中是非常常见的一个功能,其作用也就是将数据分割成多个页面来进行显示。使用场景: 当取到的数据量达到一定的时候,就需要使用分页来进行数据分割。当我们不使用分页功能的时候,会面临许多的问题:客户端的问题: 如果数据量太多,都显示在同一个页面的话,会因为页面太长严重影响到用户的体验,也不便于操作,也会出现加载太慢的问题。服务端的问题: 如果数据量太多,可能会造成内存溢出,而且一次请...原创 2018-04-26 10:14:47 · 4178 阅读 · 0 评论 -
基于Java NIO框架区别对比
一.通信框架流行基于Java NIO通信框架有Mina、Netty、Grizzly等。接下来说下它们之间的对比。二.它们的出身1、Mina出身于开源界的大牛Apache组织;2、Netty出身于商业开源大亨Jboss;3、Grizzly则出身于土鳖Sun公司。三.它们的设计理念1、Mina Mina(Multipurpose Infrastructure for Network Applicati...原创 2018-05-17 10:09:42 · 587 阅读 · 0 评论 -
面试的角度诠释Java工程师(一)
前言:我相信每一个程序员都是为了生活而努力着的。很多人因为兴趣,从此踏上了这条‘烧脑大行动’的金桥;也有很多人因为梦想和执着,奋不顾身融入这个职业;还有很多人因为被现实逼得太无奈,不得不为自己、为家人、为未来谋这么一条坎坷的路。这里,我不去评价什么,再说我也没有资格去评价啊。言归正传,下面我写这篇文章的定位是各位在场的读者,如果你认为我接下来说的内容会跟书里说的差不多,那么请高抬贵脚移步它处,但是...原创 2018-04-26 13:16:55 · 421 阅读 · 0 评论 -
记一次JavaWeb网站技术架构总结
题记工作也有几多年了,无论是身边遇到的还是耳间闻到的,多多少少也积攒了自己的一些经验和思考,当然,博主并没有太多接触高大上的分布式架构实践,相对比较零碎,随时补充(附带架构装逼词汇)。俗话说的好,冰冻三尺非一日之寒,滴水穿石非一日之功,罗马也不是一天就建成的,当然对于我们开发人员来说,一个好的架构也不是一蹴而就的。初始搭建开始的开始,就是各种框架一搭,然后扔到Tomcat容器中跑就是了,这时候我们...原创 2018-05-04 10:59:46 · 476 阅读 · 0 评论 -
Java面试知识点解析——JVM篇
(一)JVM 基础知识问题和答案都是自行整理的,所以仅供参考!欢迎指正!1)Java 是如何实现跨平台的?注意:跨平台的是 Java 程序,而不是 JVM。JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 JVM答:我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。Java 虚拟机(JVM)就是负责将字节码文件翻译成特定平...原创 2018-05-17 17:46:13 · 542 阅读 · 1 评论 -
设计模式:HelloWorld之策略模式
一.概述策略模式 定义了算法族,分别封装起来,让他们可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式的三要素:抽象策略角色: 策略类,通常由一个接口或者抽象类实现。具体策略角色:包装了相关的算法和行为。环境角色:持有一个策略类的引用,最终给客户端调用。二.案例驱动提出问题:要求做出一套模拟鸭子的游戏,游戏中会出现各种鸭子,它们一边游泳,一边呱呱叫。分析:根据OO设计思想,无非就是使各...原创 2018-04-27 10:18:01 · 362 阅读 · 0 评论 -
Java工程师的职业规划
一初级程序员:做一些静态的界面;程序员:做一些增删改查的小模块;中级程序员:做逻辑较复杂的模块;高级程序员:做核心模块;项目经理:系统的整体架构;部门经理:多项目的管理;总裁:多部门以及企业的发展规划。二如果刚毕业,就多花几年积累经验,不可能靠一门绝技吃遍天下,不要指望java 赚钱多还是c++ or .NET 赚钱多。太早。 积累经验为主。积累设计,架构,测试,交流,管理,情商等多方面的经验。然...原创 2018-04-27 11:01:28 · 4238 阅读 · 2 评论 -
学生管理系统(SSM简易版)总结
技术准备为了完成这个项目,需要掌握如下技术:Java基础知识前端:HTML, CSS, JAVASCRIPT, JQUERYJ2EE:Tomcat, Servlet, JSP, Filter框架:Spring, Spring MVC, MyBatis, Spring 与 MyBatis 整合, SSM 整合数据库:MySQL开发工具:IDEA, Maven开发流程之前虽然已经使用 Servlet ...原创 2018-05-05 12:22:41 · 4159 阅读 · 1 评论 -
Spring MVC温故而知新 – 从零开始
Spring MVC简介Spring MVC是一款基于MVC架构模式的轻量级Web框架,目的是将Web开发模块化,对整体架构进行解耦。Spring MVC有一下优点:作为Spring框架的一部分,拥有Spring的优点(IOC,AOP等)支持灵活的URL到页面控制器的映射提供灵活的数据验证、格式化、数据绑定机制支持RESTful风格 Spring MVC请求流程Spring MVC框架的整体请求...原创 2018-05-18 10:33:55 · 788 阅读 · 1 评论 -
最近面了不少java开发,据此来说下我的感受:哪怕事先只准备1小时,成功概率也能大大提升
本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只有当反复确认能力不行才会下结论,相反,如果候选人给我的印象不错,我也会从多个角度来衡量,以免招进会说但不会干活的“大忽悠”。 其实倒也不是我故意要为难候选人,毕竟入职后就是同事,但面试官...原创 2018-05-14 09:31:28 · 1813 阅读 · 5 评论 -
什么才是Java的基础知识?
近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考。我做j2ee开发已经超过十载,作为过来人,心路历程估计和大家差不多。编码的前几年,很长一段时间觉得java简单,开发实现各种功能都很轻松,代码写起来根本不费劲(主要是因为写的代码都是一些功能业务逻辑)。...原创 2018-05-14 09:55:13 · 433 阅读 · 1 评论 -
Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)
Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)开源生鲜电商平台支付目前支持支付宝与微信。针对的是APP端(android or IOS)1. 数据库表设计说明:无论是支付宝还是微信支付,都会有一个服务端的回调,业务根据回调的结果处理相应的业务逻辑。pay_logs这个表主要是记录相关的用户支付信息。是一个日志记录。比如:谁付款的,什么时候付款的,订单号多少,是支付宝还是微信,支付状态...原创 2018-05-14 10:02:56 · 2209 阅读 · 0 评论 -
一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物。互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户的增加,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。如果还按照以前传统开发模式,开发一个大型而全的系...原创 2018-05-14 10:23:26 · 446 阅读 · 0 评论 -
阿里Java架构师谈谈架构和如何成为一个Java架构师
架构的定义我们来看看软件架构的一般定义:程序和计算系统软件体系结构是指系统的一个或多个结构。 该结构包括软件的构建,构建的外部可见属性以及它们之间的相互关系。该体系结构不是可操作的软件。 具体来说,这是一个表达式,它使软件工程师能够:分析满足监管要求的设计有效性。在设计更改相对容易的阶段,请考虑架构的可能选项。降低与软件构建相关的风险。软件架构的重要性我为什么说软件架构非常重要? 直接编程直接开发...原创 2018-05-14 10:47:40 · 1597 阅读 · 0 评论 -
Intellij IDEA神器居然还有这些小技巧
概述Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intellij IDEA技巧分享给大家。本文是这个系列的第一篇,主要介绍一些你可能不知道的但是又实用的小技巧。我最爱的【演出模式】我们可以使用【Presentation Mode】,将IDEA弄到最大,可以让你...转载 2018-05-20 13:46:45 · 395 阅读 · 0 评论 -
如何快速成长为技术大牛?阿里资深技术专家的总结亮了!
写在前面不管是开发、测试、运维,每个技术人员心里多多少少都有一个成为技术大牛的梦,毕竟“梦想总是要有的,万一实现了呢”!正是对技术梦的追求,促使我们不断地努力和提升自己。然而“梦想是美好的,现实却是残酷的”,很多同学在实际工作后就会发现,梦想是成为大牛,但做的事情看起来跟大牛都不沾边,例如,程序员说“天天写业务代码还加班,如何才能成为技术大牛”,测试说“每天都有执行不完的测试用例”,运维说“扛机器...转载 2018-05-08 14:00:29 · 551 阅读 · 0 评论 -
JVM GC——垃圾回收算法
说到Java,一定绕不开GC,尽管不是Java首创的,但Java一定是使用GC的代表。GC就是垃圾回收,更直接点说就是内存回收。是对内存进行整理,从而使内存的使用尽可能大的被复用。 一直想好好写一篇关于GC的文章,可是却发现要写的东西太大了,不是一篇博客能简单的介绍完的。所以打算拆分成若干篇博客,一点点的总结下来。 本篇主要介绍的是GC中的常用算法。这些算法被广泛的应用于各个内存管理语言的虚拟机中...原创 2018-05-15 09:30:37 · 312 阅读 · 0 评论 -
Java CAS 原理分析
1.简介CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制(可以把 CAS 看做乐观锁)。CAS 操作包含三个操作数 -- 内存位置、预期数值和新值。CAS 的实现逻辑是将内存位置处的数值与预期数值想比较,若相等,则将内存位置处的值替换为新值。若不相等,则不做任何操作。在 Java 中,Java 并没有直接实现 CAS,CAS 相关的实现是通过 C++ 内...原创 2018-05-15 10:26:45 · 307 阅读 · 0 评论 -
MyBatis入门
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。一、理解什么是MyBatis?MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手...原创 2018-05-15 12:24:55 · 524 阅读 · 1 评论