自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 帮助应届生、年轻程序员快速成长的12个锦囊

今年公司来了不少应届生还有实习生,我多次受邀给他们做一些和成长相关的分享,获得良好反馈,我想可以把这些分享总结成文,一方面下次自己就不用频繁去讲,新人来让他们看文章就好了,另一方面也是想把自己的心得分享给更多的社会上的应届生和处在职业早期的年轻人。我本人在软件研发行业工作有十多年,经历过不少公司,见证过不少应届生的成长,自己也带过很多应届生实习生。从他们的成长历程中,我看到那些成长较快的应届生身上有一些共性的东西,下面是我对这些共性的总结和分享,期望对大家有帮助,让更多人更快步入成长快车道。

2020-03-29 09:03:55 395

原创 IDEA2019搜索不到插件

今天开发的时候想要安装mybatis plugin和lombok插件,于是按照常规操作到插件市场搜索并安装插件时,发现会与一直停留在插件市场的搜索过程,然后最后的搜索结果为空,如下图:最后是通过设置代理和去掉使用安装链接的方式来解决的,具体如下:1. 在系统设置中将HTTP代理方式勾选为“auto_detcect proxy settings”2. 在系统设置中...

2019-08-14 12:03:17 32446 32

原创 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第4章-瞬时响应:网站的高性能架构(待补充)

4.1 网站性能测试性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。不同视角下的网站性能有不同的标准,也有不同的优化手段​ 4.1.1 不同视角下的网站性能 用户视角的网站性能 关注点 从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度快还是慢。 用户感受到的时间,包括用户计算机和网站服务器通信的时间、网站服务器处理的时间、用户计算机浏览...

2018-10-27 19:29:07 388

原创 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第3章-大型网站核心架构要素

软件架构的定义:有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能的设计与决策,他们相互关系组成一个整体,共同构成了软件系统的架构。软件架构主要关注的5个要素如下:3.1 性能 影响 性能是网站的一个重要指标,一个打开缓慢的网站会导致严重的用户流失,可以说性能是网站架构...

2018-10-23 10:37:43 386

原创 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第2章-大型网站架构模式

2.1 网站架构模式 分层横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责 网站分层架构 应用层:负责具体业务和视图展示,如网站首页及搜索输入和结果展示在实践中,大的分层结构内部还可以继续分层,如应用层可以再细分为视图层(美工负责)和业务逻辑层(工程师负责) 服务层:为应用层提供服务支持,如用户管理服务、购物车服务等服务层也可以细分为数据接口层(适配各种输入和输出...

2018-10-22 17:30:03 475

原创 《大型网站技术架构-核心原理与案例分析》(李智慧 著)第1章-大型网站架构演化

1.1 大型网站软件系统的特点 高并发,大流量需要面对高并发用户,大流量访问 高可用系统7 * 24小时不间断服务 海量数据需要存储、管理海量数据,需要使用大量服务器 用户分布广泛,网络情况复杂许多大型互联网都是为全球用户提供服务,用户分布范围广,各地网络情况千差万别 安全环境恶劣因互联网的开放性,使得互联网站容易受到攻击,大型网站几乎每天都会受黑客攻击 需要快速变更,发布频...

2018-10-21 21:44:16 2300

原创 CentOS7问题小记

1.locate命令不可使用问题(command not found)问题描述:在centOS7以上的系统中使用“locate”文件查找命令,发现该命令不可用。原因:CentOS7默认没有安装locate命令解决方式:(1)联网状态运行yum install mlocate,出现complete即为安装完成(2)安装完成后,第一次使用locate指令前需要初始化文件库,...

2018-10-21 18:53:37 482

原创 《实战Java高并发程序设计》读书笔记-线程池

一、概述为了避免频繁地创建和销毁线程,我们可以让创建的线程进行复用。线程池中,总有那么几个活跃线程,当你需要使用线程时,可以从池子中随便拿一个空闲线程,当完成工作时,并不急着关闭线程,而是将这个线程退回到池子,方便其他人使用。简言之,在使用线程池后,创建线程变成了从线程池中获得空闲线程,关闭线程变成了向池子归还线程。如下图所示 二、JDK对线程池的支持为了更好地控制更多线程,JDK...

2018-09-25 19:16:00 319

原创 synchronized修饰普通方法和修饰静态方法

1.前言多线程这方面的学习参考的是《多线程编程核心技术》(高洪岩 著)这本书,可以说通过这本书,对多线程方面有了更多的了解,特别是书中对synchronized关键字和Lock锁的介绍方面,用了很大篇幅,在篇幅中也穿插了很多例子帮助理解,其中有一个结论当初记得特别深刻,那就是synchronized修饰静态方法和修饰普通方法时的区别。2.困惑第一遍学习时,只能说大概记住了结论就是syn...

2018-09-04 16:53:19 1053

原创 交替打印线程-基于等待唤醒机制

import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @date: 2018/8/16 * @description: 交替打印ABC三个线程,其中A先打印5次,然后...

2018-08-16 07:46:09 251

原创 单链表的反转

/** * @date: 2018/8/11 * @description: leetcode第206题 翻转单链表 * 地址:https://leetcode-cn.com/problems/reverse-linked-list/description/ */public class ReverseList{ //链表结构 public static cl...

2018-08-11 20:45:16 265

原创 矩阵的最小路径和----由最小路径问题引入暴力递归到动态规划的优化

1.暴力递归求解问题的特点把问题转化为规模缩小了的同类问题的子问题 有明确的不需要继续进行递归的条件 有当得到了子问题的结果之后的决策过程 不记录每一个子问题的解2.动态规划求解问题的特点1.从暴力递归中来 2.把每一个子问题的解记录下来,避免重复计算 3.把暴力递归的过程,抽象成了状态表达 4.并且存在化简状态表达,使其更加简洁的3.例子:最短路径问题问题从暴力递归求解方...

2018-07-22 15:47:37 1556 1

原创 二叉树的概念、性质,以及用使用Java语言实现二分搜索树

1.什么是二叉树在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。 2.二叉树的性质(1)二叉树具有唯一根结点(2)二叉树中每个结点多只有2个孩子(3)二叉树每个结点最多只有一个父节点(4)二叉树具有天然递归结构,表现为:       ①每个节点的左子树(若存在...

2018-06-11 19:26:48 549

原创 Java死锁及死锁的避免

锁是个非常有用的工具,运用场景非常多,因为它使用起来非常简单,而且易于理解。但同时它也会带来一些困扰,那就是可能会引起死锁,一旦产生死锁,就会造成系统功能不可用。产生死锁的原因可能有:1.系统资源不足2.进行运行推进的顺序不合适3.资源分配不当如果系统资源充足,进程的资源请求都能得到满足,死锁出现的可能性就很低,否则就会因为争夺有限的资源而陷入死锁。其次,其次,进程运行推进顺序...

2018-06-08 20:40:51 614

原创 JUC(java.util.concurrent)学习笔记

1.Java JUC简介 多线程的目的 (1).提高效率。尽可能去利用cpu和系统资源。 (2).注意:如果多线程使用不当的话,不仅不能提高效率,反而性能会更低,因为多线程的开销实际上比线程要大,因为多线程涉及线程之间的调度,以及cpu上下文切换,以及线程的创建,销毁,线程同步等问题。而单线程不涉及这些问题 JUC包 JDK1.5以后,Java为我们提供了java.uti...

2018-06-08 15:42:29 641

原创 深入理解Java虚拟机-类加载机制

虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。此外,类是在运行期间动态加载的。​一、类的生命周期包括一下7个阶段:备注:其中解析过程在某些情况下可以在初始化阶段之后再开始,这是为了支持Java的动态绑定。加载(Loading)验证(Verification)准备(Preparation)解...

2018-06-07 21:00:25 279

原创 深入理解Java虚拟机-垃圾收集

前言:Java虚拟机的运行时数据区域如下: 其中,程序计数器、虚拟机栈、和本地方法栈这三个区域属于线程私有的,只存在于线程的声明周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对Java堆和方法区进行。一、判断一个对象是否可被回收1.引用计数器法实现:给对象添加一个引用计数器,当对象增加一个引...

2018-06-07 20:39:45 262

原创 二叉树的遍历-非递归方式

分别用非递归的方式实现二叉树的先序遍历、中序遍历和后续遍历非递归方式实现二叉树的先序遍历。过程:1.申请一个新的栈,记为stack, 然后将二叉树的头结点head压入stack中。2.从stack中弹出栈顶结点,记为cur,然后打印cur结点的值,再将结点cur的右孩子(不为空的话)先压入stack中,最后将cur的左孩子(不为空的话)压入stack中。3.不断重复步骤2,直到stack为空,全部...

2018-06-06 22:35:55 323

原创 二叉树的遍历-递归方式

概述:用递归方式实现二叉树的遍历。二叉树结构public class Node{ public int value; public Node left; public Node right; public Node(int data){ this.value = data; }}先序遍历:先...

2018-06-06 21:47:59 288

原创 自定义链表结构

链表是一种线性结构,是最简单的真正意义上的动态数据结构。链表实现:public class LinkedList<E> { private class Node{ public E e;//权限为public,外部类就能直接访问了 public Node next; public Node(E e,Node next){ ...

2018-06-06 21:15:58 484

原创 自定义动态数组的实现

数组最大的优点:快速查询public class Array<E> { //E表示类型 private E[] data; private int size;//数组中有效元素的个数,值指向数组中第一个没有值的位置 //构造函数,传入数组的容量capacity和构造Array public Array(int capacity){ ...

2018-06-06 21:00:53 437

原创 最小的k个数-O(nlogk)解法

题目:给定一个无需的整型数组arr,找到其中最小的k个数要求:时间复杂度为O(nlogk)解题思路:1.先建立一个含有k个数的大根堆,这个堆代表"目前选出的"k个最小的数,在堆里的k个元素中堆顶的元素是最小的k个数里最大的那个。2.接下来遍历整个数,遍历的过程中看当前数是否比堆顶元素小。3.如果当前遍历到的数比堆顶小,就把堆顶的元素替换成当前的数,然后从堆顶的位置调整整个堆,让替换操作后堆的最大元...

2018-06-06 20:46:48 1096

原创 从N个数中等概率打印M个数

题目:给定一个长度为n且"没有重复元素"的数组array和一个整数m,实现函数等概论随机打印array中的m个数。要求:1.相同的数不要重复打印2.时间复杂度为O(M),额外空间复杂度为O(1)3.可以改变array数组解题思路:解法的关键点是利用要求3改变数组array。打印过程如下:1.在[0, N - 1]中随机得到一个位置a,然后打印array[a]2.把array[a]和array[n ...

2018-06-06 20:37:05 448

原创 删除链表中重复的结点

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5import java.util.ArrayList;public class DeleteDuplication { public static class ...

2018-06-06 20:30:17 194

原创 深入理解Java虚拟机-运行时数据区域

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。Java虚拟机所管理的内存将会包括一下几个运行时数据区域。                            1.程序计数器(线程私有区)记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)2.虚拟机栈(线程私有区)(1)描述的是Java方法执行的内存模型(2)每个方...

2018-06-06 20:08:36 210

原创 Redis(1)-概述及应用领域

1.什么是Redis? Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求。是一种非关系型数据库。   2.非关系型数据库前面提到,redis是一个nosql(not only sql)数据库,即非关系型数据库。这里涉及到一个概念:非关系型数据库。我们在java开发中,常用的mysql数据库是一种关系型数据库。那么非关...

2018-05-03 17:11:39 396

原创 集合框架-用LinkedList模拟栈数据结构的集合

题目的意思:    你自己的定义一个“集合类”,在这个集合类内部可以使用LinkedList模拟代码如下package cn.itcast_05;import java.util.LinkedList;/** * 自定义的栈集合 * * @author 风清扬 * @version V1.0 */public class MyStack { private LinkedLi...

2018-03-14 12:32:15 243

原创 集合框架-List接口的实现类-LinkedList

LinkedList的特点底层数据结构是链表,查询慢,增删快。线程不安全,效率高LinkedList特有功能package cn.itcast_03;import java.util.LinkedList;/* * LinkedList的特有功能: * A:添加功能 * public void addFirst(Object e) * public void add...

2018-03-14 11:42:28 253

原创 集合框架-List接口的子类-Vector

Vector类的特点:底层数据结构为数组,查询快,增删慢。线程安全,效率低Vector类的特有功能:package cn.itcast_02;import java.util.Enumeration;import java.util.Vector;/* * Vector的特有功能: * 1:添加功能 * public void addElement(Object obj) ...

2018-03-14 11:35:25 294

原创 JDK5新特性-可变参数及Arrays工具类的asList()方法

概述可变参数:定义方法的时候不知道该定义多少个参数格式   修饰符 返回值类型 方法名(数据类型…  变量名){   }注意:    这里的变量其实是一个数组    如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个实现代码package cn.itcast_03;/* * 可变参数:定义方法的时候不知道该定义多少个参数 * 格式: * 修饰符 返回值类型 方法名(...

2018-03-14 11:26:09 373

原创 JDK5新特性-静态导入(了解)

package cn.itcast_02;/* * 静态导入: * 格式:import static 包名….类名.方法名; * 可以直接导入到方法的级别 * * 静态导入的注意事项: * A:方法必须是静态的 * B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。 */import stat...

2018-03-14 11:20:11 230

原创 JDK5新特性-增强for循环

概述增强for:是for循环的一种。格式 * for(元素数据类型 变量 : 数组或者Collection集合) { * 使用变量即可,该变量就是元素 *            }好处:简化了数组和集合的遍历。弊端 增强for的目标不能为null。如何解决呢?对增强for的目标先进行不为null的判断,然后在使用package cn.itcast_01;import java.util...

2018-03-14 11:17:36 414

原创 JDK5新特性-泛型

问题引入package cn.itcast_01;import java.util.ArrayList;import java.util.Iterator;/* * ArrayList存储字符串并遍历 * * 我们按照正常的写法来写这个程序, 结果确出错了。 * 为什么呢? * 因为我们开始存储的时候,存储了String和Integer两种类型的数据。 * 而在遍历...

2018-03-14 11:05:43 250

原创 集合框架-练习-两个去重案例

案例一:去除集合中ArrayList集合中的重复字符串案例(字符串的内容相同)思路一:构造一个新集合,并遍历旧集合,获取到旧集合中的每一个元素,拿旧集合中的每一个元素到新集合里找,看有没有,没有就添加进新集合,有则不添加进新集合原理图如下实现代码package cn.itcast_04;import java.util.ArrayList;import java.util.Iterator;...

2018-03-14 10:44:29 290

原创 集合框架-List子类特点(面试题)

ArrayList:    底层数据结构是数组,查询快,增删慢。    线层不安全,效率高。Vector    底层数据机构是数组,查询块,增删慢。    线程安全,效率低。LinkedList    底层数据结构是链表,查询慢,增删快。    线程不安全,效率高。...

2018-03-14 07:15:54 240

原创 集合框架-常见数据结构

栈与队列数组和链表

2018-03-14 07:11:22 313

原创 集合框架-并发修改异常ConcurrentModificationException

概述 ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。产生的原因迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。解决方式A:迭代器迭代元素,迭代器修改元素 元素是跟在刚才迭代的元素后面...

2018-03-14 07:04:41 207

原创 集合框架-List接口

List接口概述    有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。    与 set 不同,列表通常允许重复的元素。特点    有序(存储和取出的元素一致),可重复的。package cn.itcast_01;import java.util.ArrayList...

2018-03-14 06:52:54 252

原创 集合框架-迭代器为什么是一个接口而不是一个类?

    转自传智播客刘意老师的javase视频教程,个人觉得解释得非常好,有一种顿悟的感受:    假设迭代器定义的是一个类,这样我们就可以创建该类的对象,调用该类的方法来实现集合的遍历。但是,Java提供了很多的集合类,这些集合类的数据结构是不同的。所以,存储的方式和遍历的方式应该是不同的。进而它们的遍历方式也应该不是一样的。最终,就没有定义迭代器类。    而无论哪种集合,都应该具备获...

2018-03-14 06:42:33 906

原创 集合框架-Collection-遍历

遍历集合的遍历。其实就是依次获取集合中的每一个元素。遍历方式一:先转成对象数组,再对对象数组进行遍历(少用)package cn.itcast_01;import java.util.ArrayList;import java.util.Collection;/* * Object[] toArray():把集合转成数组,可以实现集合的遍历 */public class Colle...

2018-03-14 00:03:54 261

空空如也

空空如也

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

TA关注的人

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