Java
文章平均质量分 56
蜗牛互联网
阿里P7,Java 后端方向,欢迎关注和私信~
展开
-
手写的第一个 Java 应用程序,执行的时候发生了什么
## 前言在上一篇文章 超详细!JDK 8 下载、安装和环境配置(macOS 和 Windows 版本)的介绍下,我们已经搭好 Java 开发环境了,本文我们就实战一下,编一个 Java 应用程序,程序运行的时候能看到 Hello World 的输出。我们同时分析下从编码到运行的整个过程,都发生了什么!编码输出 Hello World我们不借助任何的集成开发环境,就用最原始的手写的方式来编码!计算机上手写的话,就是往记事本上敲代码。Windows 用户可以直接打开记事本,macOS 用户可以在控原创 2022-03-18 08:30:00 · 157 阅读 · 4 评论 -
学习 Java,使用哪个版本最好
前言工欲善其事,必先利其器。我们要学习和使用 Java 语言,就需要搭建好 Java 的开发环境,边学习知识,边实践编码,可以更好的体会 Java 这门语言的精髓。什么是 JDK看过 学习 Java 语言,你必须知道的 Java 简史 的同学应该知道,Java 在诞生时,就为我们配备了 Java 的运行环境和开发工具,而这些,都打包在了 JDK 里面。JDK 全称 Java Development ToolKit,直译一下就是 Java 语言开发工具包。JDK 包含了 开发者工具比如 javac.原创 2022-03-16 08:30:00 · 4797 阅读 · 1 评论 -
学习 Java 语言,你需要知道的 Java 简史
阅读本文你将收获:为什么要学习 JavaJava 这门语言如今是互联网行业炙手可热的编程语言,像阿里、美团这些大厂,技术体系都是建立在 Java 之上。这些大厂又是很多新兴互联网企业的技术风向标,因此 Java 使用范围相当的广,对 Java 程序员的需求量就相当的大。Java 不仅仅是一杯热腾腾的咖啡,还可以是一个靠得住的饭碗!蜗牛从大学开始就接触 Java,工作之后也一直是使用 Java 这门程序设计语言作为编程首选。希望结合自己的知识体系和实践经验,产出 Java 学习的一系列教程,能够帮助原创 2022-03-14 08:30:00 · 250 阅读 · 2 评论 -
有了这个插件,再也不用担心代码不合规范了
大家好,我是蜗牛哥。在阿里待了这么多年,有个软件一直在用,那就是 IDEA,这是宇宙最好用的 Java IDE,没有之一!IDEA 的开放能力做的还不错,可以添加很多插件,让我们的很多开发工作更加便捷。我装的插件其实没几个,但有一款是一直以来在用的,那就是——阿里巴巴代码规约插件。这个插件呢,是阿里巴巴基于《阿里巴巴 Java 开发手册》中的内容,研发出的一套自动化的 IDE 检测插件。目前插件实现了开发手册中的 53 条规则,大部分基于 PMD 实现,其中有 4 条原创 2022-03-11 08:30:00 · 1274 阅读 · 7 评论 -
UML 视图常用元素参考
1. 用例图常用元素2. 类图常用元素3. 活动图常用元素4. 状态图常用元素5. 时序图常用元素6. 协作图常用元素原创 2022-03-10 08:00:00 · 341 阅读 · 0 评论 -
【Java实现经典算法】有理数四则运算
题目描述本题要求编写程序,计算2个有理数的和、差、积、商。输入描述:输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整数,负号只可能出现在分子前,分母不为0。输出描述:分别在4行中按照“有理数1 运算符 有理数2 = 结果”的格式顺序输出2个有理数的和、差、积、商。注意输出的每个有理数必须是该有理数的最简形式“k a/b”,其中k是整数部分,a/b是最简分数部分;若为负数,则须加括号;若除法分母为0,则输出“Inf”。题目原创 2022-03-08 08:00:00 · 724 阅读 · 0 评论 -
【Java实现经典算法】找出数组中重复最多的数
找出数组中重复最多的数public static int getRepeatMost(int a[]){ Map<Integer,Integer> map = new HashMap<Integer,Integer>(); //记录每个元素出现的次数 for(int i = 0;i < a.length;i++){ if(map.containsKey(a[i])){ map.put(a[i], map原创 2022-03-07 08:00:00 · 1796 阅读 · 1 评论 -
校招来袭,我把当年进阿里的学习笔记拿出来分享给大家~
每年春天和秋天,对于第二年毕业,打算从事互联网行业工作的同学,都是特别重要的两个季度。因为各个厂的校园招聘集中在这两个季度,春招主要是实习生招聘,秋招主要是正式招聘。天气...原创 2022-03-05 20:02:00 · 320 阅读 · 0 评论 -
【Java 实现经典算法】数字黑洞
题目描述给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。输入描述输入给出一个(0, 10000)区间内的正整数N。输出描述:如果N的4位数字全相等,则在一行内输出“N - N = 0000”否则将计算的每一步在一行内输出,直到6174作为差出现注意每个数字按4位数格式输出。代码实现pa原创 2022-03-04 08:00:00 · 451 阅读 · 0 评论 -
【Java 实现经典算法】每K个结点反转单链表
题目描述给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。思路通过链表长度和K值确定需要反转的结点数每K个反转成新链表,把头保存到List中需要反转的结点数已到并且剩下的结点数不足K个,不反转,即把当前结点存到List中把List中各个链表连接代码package com.liuyong666.pat;impo原创 2022-03-02 03:00:00 · 492 阅读 · 0 评论 -
【Java 实现经典算法】科学计数法
题目描述科学计数法是科学家用来表示很大或很小的数字的一种方便的方法其满足正则表达式[±][1-9]"."[0-9]+E[±][0-9]+即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留输入描述:每个输入包含1个测试用例,即一个以科学计数法表示的实数A。该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。输出描述:对每个测试用例,原创 2022-02-28 08:00:00 · 2413 阅读 · 0 评论 -
Java 实现经典算法之格雷码
格雷码格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示假设使用 n 位元来表示每个数字,任两个数之间只有一个位元值不同如果要产生n位元的格雷码,那么格雷码的个数为2^nn位元格雷码是基于n-1位元格雷码产生的算法产生 0, 1 两个字符串。在第一步的基础上,每一个字符串都加上0和1,但是每次只能加一个,所以得做两次。这样就变成了 00,01,11,10 (注意对称)。在第二步的基础上,再给每个字符串都加上0和1,同样,每次只能加一个,这样就变成了 000,001,01原创 2022-02-19 11:46:54 · 575 阅读 · 0 评论 -
剑指Offer之三十-最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。解法1对数组排序,取前边k个数存到list集合中该解法时间复杂度依赖于排序代码实现public ArrayList<Integer> getLeastNumbers(int [] input, int k) { ArrayList<Integer> list = new ArrayList<Integer>(); i原创 2022-02-23 08:15:00 · 95 阅读 · 1 评论 -
剑指Offer之二十九-数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解法1使用map,键存元素,值存出现的次数发现有某个元素的次数超过数组长度的一半,则返回该元素代码实现public int moreThanHalfNum(int [] array) { if(array == null || array.length == 0原创 2022-02-21 08:15:00 · 158 阅读 · 0 评论 -
剑指Offer之二十八-字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。结果请按字母顺序输出。输入描述输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路先不考虑是否出现重读字符,要对一个字符进行全排列,可以把第一个字符和后面的字符看成两部分而第一个字符后面的字符又可以看成第一个字符和后面两部分,是一个递归过程只要第一个字符的位置没有到达字符串的末尾原创 2022-02-20 10:00:00 · 85 阅读 · 0 评论 -
剑指Offer之二十七-二叉搜索树与双向链表
二叉树结构class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:由于二叉搜索树的中序遍历就是排序的,如果是构造单链表,原创 2022-02-18 08:30:00 · 74 阅读 · 0 评论 -
剑指Offer之二十六-复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。复制一个复杂链表结点定义class RandomListNode { int label; RandomListNode next = null; RandomListNode random = null; public RandomListNode(int label){ this.label = label; }}解析遍历链表,每个结点后边复制相同的结原创 2022-02-17 08:30:00 · 135 阅读 · 0 评论 -
剑指Offer之二十五-二叉树中和为某一值的所有路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解析先序遍历,将遍历过的结点放到A集合中当遍历到叶子结点并且和恰好是目标值时,将遍历经过的所有结点放到B集合中,B则是满足题意的一条路径如果遍历到叶子结点和仍然不等于目标值,那么就移除A集合中添加的结点,修改和,切换到右孩子结点重新计算如果没有遍历到叶子结点就从孩子结点中继续寻找这样的路径二叉树定义class TreeNode {原创 2022-02-16 08:30:00 · 77 阅读 · 0 评论 -
剑指Offer之二十四-二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回ture,否则返回false。假设输入的数组的任意两个数字都互不相同。解析找到根结点从头遍历序列,第一个比根结点大的元素为右子树的起点判断右子树是否都比根结点大,若不是返回false,若是,进行下一步分别把左子树和右子树都以上面规则进行判断,若左右子树都能返回true,则整个序列为二叉搜索树的后序遍历序列,返回true代码实现public boolean verifySquenceOfBST(in原创 2022-02-15 08:30:00 · 48 阅读 · 0 评论 -
剑指Offer之二十三-从上往下打印二叉树
二叉树结构class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解析考察层序遍历每一次打印一个结点的时候,如果该结点有子节点,则把该结点的子节点放到一个队列的末尾。接下来到队列的头部原创 2022-02-13 11:25:54 · 64 阅读 · 0 评论 -
剑指Offer之二十二-栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列12345是某栈的压栈序列,序列45321是该压栈序列对应的一个弹出序列,但43512就不可能是该压栈序列的弹出序列。解析栈的特点是FIFO压入序列是确定的,则压入序列之间的元素可能会经历压入后马上被弹出的情况具体思路为:根据弹出序列的第一个值,判断在该元素之前被压入栈的所有元素.栈顶元素与弹出序列第一个值进行比较,等则判断弹出序列的下一个元素,判断依原创 2022-02-11 08:45:00 · 319 阅读 · 0 评论 -
剑指Offer之二十一--包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。解析在数据栈的基础上维护一个用来存放最小值的辅助栈每次入栈,新入栈的元素都要和辅助栈栈顶元素比较,如果新入栈的元素更小,就让它也加入最小栈中,否则最小栈再次压入其栈顶元素每次出栈,数据栈和辅助栈同时弹出元素这样就可以保证在任何情况下,辅助栈栈顶元素始终是数据栈中的最小元素代码实现public class MinFunctionStack{ Stack<Integer> data = new原创 2022-02-10 08:45:00 · 144 阅读 · 0 评论 -
剑指Offer之二十--顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10解析因为每打印一圈都会改变起始坐标,所以需要先确定矩阵大小与起始坐标的关系比如4阶矩阵,第一圈起始坐标为(0,0),第二圈起始坐标为(1,1),.原创 2022-02-09 08:45:00 · 321 阅读 · 0 评论 -
本地远程连接 MySQL server
问题MySql Server 出于安全方面考虑默认只允许本机(localhost, 127.0.0.1)来连接访问。如果想远程访问,需要额外做下操作。配置修改定位文件/etc/mysql/mysql.conf.d/mysqld.cnf定位属性skip-networking #注释掉 因为它是屏蔽掉一切TCP/IP连接 bind-address = 127.0.0.1 #它和上一个选项是异曲同工,要想远程连接,也得注释掉 重启服务/etc/init.d/mysql restart建原创 2021-11-16 10:00:00 · 256 阅读 · 0 评论 -
使用 IDEA 快速搭建 Spring Boot 项目
一、新建项目1. File->New->Project2. 找到 Spring Initialzr,点击 Next3. 修改项目信息,Next4. 选择 Web,NextLombok 可不加,我这里主要是减少 getter 和 setter 代码。5. 点击 Finish,完成项目创建二、运行项目1. 项目结构图2. 编写 Controller@RestControllerpublic class HelloWorldController { @原创 2021-11-14 10:00:00 · 216 阅读 · 0 评论 -
Java 异常处理一览 | 进阶篇
前言《Java 异常处理一览 | 基础篇》介绍了 Java 异常处理的一些基本操作,本文介绍下异常处理的一些进阶操作!try-with-resources 语句我们在对一些资源进行操作时,经常会有固定的写法:try 中打开资源finally 中关闭资源比如下面这个程序:static String readFirstLineFromFileWithFinallyBlock(String path)原创 2021-11-13 11:17:29 · 776 阅读 · 0 评论 -
【架构师之路】四、系统架构
高并发,大流量Google 日均 PV 数 35 亿,日均 IP 访问数 3 亿微信在线用户数 10 亿天猫双十一活动一天交易额 3000 亿高可用系统 7*24 小时不间断服务。大型互联网站的宕机事件通常会成为新闻焦点。海量数据需要存储、管理海量数据。Facebook 每周上传的照片数目接近 10 亿百度收录的网页数目有数百亿Google 有近百万台服务器为全球用户提供服务用户分布广泛,网络情况复杂中美光缆的数次故障,也让一些对国外用户依赖较大的网站不得不考虑在海外建立数据中心。安全环境恶劣黑客攻击。需求原创 2021-09-24 22:19:45 · 183 阅读 · 0 评论 -
Java 数组迭代你用对了吗?
作者:白色蜗牛 公众号:蜗牛互联网Java 数组是我们学习或工作中常用到的数据结构,我们会经常写数组迭代的代码,但你的代码是最优雅的么?本文介绍三种数组迭代的方式以及最佳实践。1、概述首先我们通过遍历数组值的基本方法,来迭代数组。其次我们用 Java 比较古老的方法实现,最后我们再使用 Java 8 的 Stream API 将数组转成迭代器。除此之外,我们可以把这个技巧应用在字符串的处理上。2、通过循环进行数组迭代通过循环在数组上建立迭代逻辑,根据索引从数组中获取相应的值。代码:package&原创 2021-09-22 07:28:11 · 211 阅读 · 0 评论 -
【架构师之路】三、设计模式
面向对象编程与面向对象分析面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。面向对象分析是将客观世界,即编程的业务领域进行对象分析。充血模型与贫血模型领域驱动设计DDD面向对象设计的目的和原则软件设计的最终目的,是使软件达到「强内聚、松耦合」,从而使软件:易扩展-易于增加新的功能更强壮-不容易被粗心的程序员破坏可移植-能够在多样的环境下运行更简单-容易理解、容易维护面向对象设计的原则为了达到上述设计目标,有人总结了多种指导原则「原则」是独立于编程语言的,甚至也可以用于非面向对象的编程原创 2021-09-19 21:54:29 · 101 阅读 · 0 评论 -
【架构师之路】二、软件设计原则
面向对象编程与面向对象分析面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。面向对象分析是将客观世界,即编程的业务领域进行对象分析。充血模型与贫血模型领域驱动设计DDD面向对象设计的目的和原则软件设计的最终目的,是使软件达到「强内聚、松耦合」,从而使软件:易扩展-易于增加新的功能更强壮-不容易被粗心的程序员破坏可移植-能够在多样的环境下运行更简单-容易理解、容易维护面向对象设计的原则为了达到上述设计目标,有人总结了多种指导原则「原则」是独立于编程语言的,甚至也可以用于非面向对象的编程原创 2021-09-18 22:11:20 · 157 阅读 · 0 评论 -
架构师之路-【1】架构方法
架构方法如何学习?学习东西很重要的一点是 悟。悟性来自思维方式和知识体系。收获的不只是概念,而是从知识之间的关系,找寻背后的原理,探索底层的本质。架构师的核心输出:架构方案PPT 套路、设计套路、技术选型成为架构师的途径:跳槽内部晋升招聘职位要求:分布式系统设计和开发经验;设计到实现对齐业内一流产品标准;沟通、组织、团队协作能力;分布式中间件深入理解;领域模型、微服务架构招聘职位描述:产品调研&整体设计;难点技术攻坚、核心组件服务编码;定位系统原创 2021-09-15 08:40:44 · 667 阅读 · 2 评论 -
超详细!JDK 8 下载、安装和环境配置(macOS 和 Windows 版本)
【阿里校招提前批开始啦,2022 届搞 Java 的朋友请联系我内推,多一次面试机会!】前言Java 是一门开源的程序设计语言,它配套的 JDK 同样也是可以免费下载使用的。不过 JDK 的使用对于新手来讲,稍微有一点点门槛,因为涉及到一些特殊的配置,还是有些麻烦的。不过没关系,蜗牛准备了保姆级的超详细教程,帮你快速用上 JDK!!!上一篇文章,学习 Java,使用哪个版本最好,我们选择了 JDK 8,因此本文就以 JDK 8 为例,介绍它的下载、安装和环境配置全过程。JDK 8 下载JDK原创 2021-03-02 08:45:31 · 124545 阅读 · 78 评论 -
学习 Java,使用哪个版本最好
前言工欲善其事,必先利其器。我们要学习和使用 Java 语言,就需要搭建好 Java 的开发环境,边学习知识,边实践编码,可以更好的体会 Java 这门语言的精髓。什么是 JDK看过 学习 Java 语言,你必须知道的 Java 简史 的同学应该知道,Java 在诞生时,就为我们配备了 Java 的运行环境和开发工具,而这些,都打包在了 JDK 里面。JDK 全称 Java Development ToolKit,直译一下就是 Java 语言开发工具包。JDK 包含了 开发者工具比如 javac.原创 2021-02-24 08:33:36 · 3731 阅读 · 0 评论 -
Spring Boot 项目的这些文件都是干啥用的?
这里写自定义目录标题course.idea.mvnsrctarget.gitignorecourse.imlHELP.mdmvnw 和 mvnw.cmdpom.xmlcourse.idea.mvnsrctarget.gitignorecourse.imlHELP.mdmvnw 和 mvnw.cmdpom.xml上一讲我们用官网包或者 IDE 工具,快速构建了 Spring Boot 应用,并且看到了第一个程序的运行结果:Hello World!本文我们了解下 Spring Boot 的目录结构,了解一个原创 2021-01-29 00:07:08 · 630 阅读 · 0 评论 -
免费稳定图床最佳实践:PicGo+GitHub+jsDeliver 极简教程
一、下载 PicGoPicGo 是啥?顾名思义,它是一个快速上传图片并获取 图片 URL 链接的工具。目前支持七牛、腾讯云、阿里云和 GitHub 等图床。该工具代码已在 GitHub 开源,读者可以自行去下载。考虑到网络问题,mac 用户后台回复 picgo_dmg 获取高速下载链接。????PicGo-2.2.2.dmg下载完成后,应用列表会有这么一个图标,点击就启动了。PicGo 默认只出现在顶部菜单栏,点击软件图标会显示已上传的图片列表,点击图片会复制链接。右击图标,打开详细窗口,原创 2021-01-27 08:06:08 · 299 阅读 · 0 评论 -
万字多图 | UML 入门指南
这里写自定义目录标题一、前言二、从一个示例开始三、什么是 UML?3.1 为什么称为语言3.2 什么是建模3.3 统一的意义在哪四、为什么需要 UML五、UML 的适用场景六、UML 的组成结构6.1 核心元素6.1.1 版型6.1.2 参与者6.1.3 用例6.1.4 边界6.1.5 业务实体6.1.6 包6.1.7 分析类6.1.8 设计类6.1.9 关系6.1.10 组件6.1.11 节点6.2 核心视图6.2.1 结构视图6.2.1.1 用例图6.2.1.2 类图6.2.1.3 对象图6.2.1.4原创 2021-01-14 01:47:33 · 637 阅读 · 2 评论 -
1024,属于程序员的一天
我发现人们对数字情有独钟,经常会为一组数字赋予特殊的含义。比如 888 就是「发发发」,886 就是「拜拜了」,「1314」就是「一生一世」,除了谐音以外,有的数字在特殊的环境下又有特别的含义。比如你身份证号里会有八位代表了你的出生年月,还有互联网行业里常提的 996 是指早上九点上班,晚上九点下班,一周工作六天,另外 1024 是属于程序员的特有数字,因此每年的 10 月 24 日就成为了程序员的节日。为什么 1024 是属于程序员的特有数字呢?这要从程序员的工作特点说起。程序员这个工种,他必须要和计原创 2020-10-31 15:59:30 · 425 阅读 · 0 评论 -
利用dom4j创建XML文件
最近自学了利用dom4j创建XML文件,并成功的写出了XML文件,现分享出来,大家共同学习。在eclipse的集成开发环境中,将下载好的dom4j中的jar包导入到指定的java工程项目中。一切准备就绪,即可开始写代码了。我要完成创建的文件内容如下: 小花 21 计算机 晓敏 22原创 2015-02-17 17:29:39 · 499 阅读 · 0 评论 -
利用dom4j读取XML文件
需求:利用dom4j读取XML文件,并封装成对象。以下是要读取的XML文件内容: zhangsan 20 lisi 22 wangwu 21 方法如下:先创建存放原创 2015-02-17 20:43:46 · 462 阅读 · 0 评论 -
利用POI读取Excel文件
前几天实现了利用POI创建Excel文件,今天分享一下如何利用POI读取Excel文件。要读取的文件内容,以下截图已给出:下面讲读取文件内容的方法。先创建一个读取Excel的工具类。/** * 操作Excel表格的功能类 */public class ExcelReader { private POIFSFileSystem fs;原创 2015-02-16 20:02:33 · 680 阅读 · 1 评论