JDK

将SSM项目部署到阿里云服务器(linux)

守給你的承諾、 提交于 2020-11-11 08:53:48
一、准备工作 1.购买阿里云服务器 2.创建linux CentOS操作系统 3.开放服务器安全组 3.下载Xshell(远程连接服务器)和Xftp(本地上传文件到服务器) 4.下载tomcat,mysql,JDK安装包(注意:下载linux操作系统的安装包) (1)在阿里云控制台创建操作系统如下: (2)打开服务器安全组 点击创建的实例,点击本实例安全组,点击配置规则 开放3306(Mysql)和8080(Tomcat)两个端口如下图所示: (3)下载好的tomcat,mysql,JDK安装包如下(mysql安装包建议版本一致,否则可能会连接失败): 二、用Xshell和Xftp连接到自己的服务器 (1)使用Xshell连接到服务器 Name填自己的连接名(随便起) Host填自己的服务器公网IP 填入linux操作系统的用户名(一般都是root) 填入设置的linux密码(忘记密码可以看下一步重置密码) 重置linux密码 Xshell连接云服务器成功 (2)Xftp使用同样的方法连接到服务器 Host一样填自己的服务器公网IP 三、创建服务所用文件夹 1. 进入linux根目录,并在根目录下创建www/server文件夹,用于存放安装包文件。 2. 使用Xftp,将三个安装包拖进linux云服务器/www/server下 上传完成之后,在Xshell中执行命令查询如下: 3.

springtest mapper注入失败问题解决 {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我是研究僧i 提交于 2020-11-11 05:26:56
花费了一下午都没有搜索到相关解决方案的原因,一是我使用的 UnsatisfiedDependencyException 这个比较上层的异常(在最前面)来进行搜索, 范围太广导致没有搜索到,而且即便是有人提出是包扫描的问题,但是我spring的基础太差,所以也不知道该怎么操作, 然后这次又印证了我之前的那篇博客,即碰到异常一定要找到根异常,参考我之前的文章: java spring 等启动项目时的异常 或 程序异常的解决思路 ; 根异常一般在异常行的末尾,这次就是搜索末尾的 {@org.springframework.beans.factory.annotation.Autowired(required=true)} ,才搜索到下面的这篇解决的博客的, 注:这个问题跟类名,方法名,idea版本 没有任何关系。 注:每次使用springtest进行非web的测试时,都需要按照下面的正确示例来写注解,并且设置idea resources为 test resources,并且在 applicationContext.xml 中, 把包扫描 设置为 自动配置 <context:annotation-config /> ,否则会报 BeanCreationException: Error creating bean with name 参考: https://blog.csdn.net

Spring (AOP和IOC)

試著忘記壹切 提交于 2020-11-11 05:23:46
IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。 (2). 在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。 (3). 在系统运行中,动态的向某个对象提供它所需要的其他对象。 (4). 依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。 总而言之,在传统的对象创建方式中

Apache的commons-collections4集合工具类CollectionUtils工具类

孤者浪人 提交于 2020-11-10 18:04:48
这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUtils。 个人觉得CollectionUtils在真实项目中,可以使你的代码更加简洁和安全。 所以需要倒入相关jar包,目前从maven找到最新jar包如下: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.3</version> </dependency> 一、API常用方法 /** * 1、除非元素为null,否则向集合添加元素 */ CollectionUtils.addIgnoreNull(personList,null); /** * 2、将两个已排序的集合a和b合并为一个已排序的列表,以便保留元素的自然顺序 */ CollectionUtils.collate(Iterable<? extends O> a, Iterable<? extends O> b) /** * 3、将两个已排序的集合a和b合并到一个已排序的列表中,以便保留根据Comparator c的元素顺序。 */ CollectionUtils.collate(Iterable<? extends O> a,

放弃Eclipse,IntelliJ IDEA超全教程从各种基础配置到使用技巧,保你上瘾

|▌冷眼眸甩不掉的悲伤 提交于 2020-11-10 11:56:59
前言: IntelliJ IDEA是一款十分智能,高效的开发工具,可能还有很多开发者还在用Eclipse,笔者之前也是从Eclipse转到IDEA的,通过不断地学习与实践,逐渐体会到了IDEA所带来的开发上的便利,那今天小编就带大家一起学习一下这款神器的使用。 点击可 下载最新版IntelliJ IDE 一.IDEA VS Eclipse 概念上IDEA和Eclipse差别还是很大的,IDEA取消了工作空间的概念,并且将项目的概念改为了模块的概念。 在IDEA中不需要设置工作空间,因为每一个Project都具备一个工作空间! 对于每一个IDEA的项目工程(Project)而言,它的每一个子模块(Module)都可以使用独立的JDK和MAVEN配置。而这种多元化的灵活性正是Eclipse所缺失的,因为开始Eclipse在初次使用时已经绑定了工作空间。 二.IDEA默认配置 由于IDEA没有工作空间的概念,所以每个新项目(Project)都需要设置自己的JDK和MAVEN等相关配置,那就造成每个新项目都要重新配置,这显然不符合我们的预期。于是IDEA就可以设置默认配置。 设置默认配置: 顶部导航栏 -> File -> Other Settings -> Default Settings /ProjectStructs 打开当前配置:顶部导航栏 -> File -> Settings

java--JVM

青春壹個敷衍的年華 提交于 2020-11-10 07:52:37
1、什么是类加载器   类加载器就是Java运行时环境(Java Runtime Environment)的一部分,负责动态加载Java类到Java虚拟机的内存空间中。 2、类的生命周期 加载:加载类的二进制数据。 连接:包含验证、准备、初始化。1)验证:文件格式、元数据、字节码、符号引用验证。2)准备:为类的静态变量分配内存,并将其初始化为默认值。3)解析:把类中的符号引用转换为直接引用。 初始化:为类的静态变量赋予正确的初始值。 使用:通过new出对象并使用。 卸载:执行垃圾回收。 JVM初始化步骤 1、假如这个类还没有被加载和连接,则程序先加载并连接该类 2、假如该类的直接父类还没有被初始化,则先初始化其直接父类 3、假如类中有初始化语句,则系统依次执行这些初始化语句 类初始化时机: 只有当对类的主动使用的时候才会导致类的初始化,类的主动使用包括以下六种: – 创建类的实例,也就是new的方式 – 访问某个类或接口的静态变量,或者对该静态变量赋值 – 调用类的静态方法 – 反射(如Class.forName(“com.shengsiyuan.Test”)) – 初始化某个类的子类,则其父类也会被初始化 – Java虚拟机启动时被标明为启动类的类(Java Test),直接使用java.exe命令来运行某个主类 结束生命周期 在如下几种情况下,Java虚拟机将结束生命周期 –

4.关于 CPU 你需要了解的

扶醉桌前 提交于 2020-11-10 07:51:10
我们如果留意的话,可能经常会听到什么 x86/x86_64、ARM、RISC-V 等关键词,但是很多人并不知道指的是什么。比如:Java 程序员在下载官方 JDK 时,如果对这个概念不了解的话,只知道选 x64 那个东西下载就好,其他一脸懵逼。所以有必要了解一下 CPU 的相关知识。 这篇主要讲解一下三个知识点: CPU 内部结构 CPU 指令集 SMP 和 NUMA 1.CPU 内部结构 CPU 内部有很多组件,比如 MMU/TLB 等,但是主要的部件主要有三类: 控制单元、存储单元、运算单元 。 控制单元由程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)等控制器组成 ,很多同学应该对程序计数器(PC)比较耳熟。控制单元主要功能有: 从内存中获取指令 对指令进行译码,译码得到电气信号用来控制 CPU 的操作 控制 CPU 与内存的数据流动 运算单元主要部件是算术逻辑单元(ALU) 。控制单元会将对应的数据输入到这个部件,让它进行数据的运算。它能支持的运算主要是 加减乘除、移位、逻辑 。 存储单元它主要 用来暂时存放 cpu 将要获取的数据或者刚产生的数据 ,它由 专用寄存器和通用寄存器 两个部分组成。通用寄存器是可以由程序员进行控制的,一般可用汇编语言来控制。那专用寄存器和通用寄存器都有哪些呢?这个问题就比较专业了,我也记不住那些 AX、BX、CX、DX、BP、SP

java并发编程(八) CAS & Unsafe & atomic

人盡茶涼 提交于 2020-11-10 07:38:01
参考文档: https://www.cnblogs.com/xrq730/p/4976007.html CAS(Compare and Swap) 一个CAS方法包含三个参数CAS(V,E,N)。V表示要更新的变量,E表示预期的值,N表示新值。只有当V的值等于E时,才会将V的值修改为N。如果V的值不等于E,说明已经被其他线程修改了,当前线程可以放弃此操作,也可以再次尝试次操作直至修改成功。基于这样的算法,CAS操作即使没有锁,也可以发现其他线程对当前线程的干扰(临界区值的修改),并进行恰当的处理 CAS的实现原理 CAS是通过 Unsafe 实现的,看下Unsafe下的三个方法: public final native boolean compareAndSwapObject(Object paramObject1, long paramLong, Object paramObject2, Object paramObject3); public final native boolean compareAndSwapInt(Object paramObject, long paramLong, int paramInt1, int paramInt2); public final native boolean compareAndSwapLong(Object

java之jvm

心不动则不痛 提交于 2020-11-10 06:27:21
1.JVM内存模型 线程独占:栈,本地方法栈,程序计数器 线程共享:堆,方法区 回答以上问题是需回答两个要点: 1. 各部分功能 2. 是否是线程共享 2.JMM与内存可见性 JMM是定义程序中变量的访问规则,线程对于变量的操作只能在自己的工作内存中进行,而不能直接对主内存操作.由于指令重排序,读写的顺序会被打乱,因此JMM需要提供原子性,可见性,有序性保证. 3.类加载与卸载 加载机制-双亲委派模式 双亲委派模式,即加载器加载类时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器.父类加载器能够完成加载则成功返回,不能则子类加载器才自己尝试加载. 优点: 避免类的重复加载 避免Java的核心API被篡改 分代回收 分代回收基于两个事实:大部分对象很快就不使用了,还有一部分不会立即无用,但也不会持续很长时间. 年轻代->标记-复制 老年代->标记-清除 回收算法 1.CMS算法 1.7前主流垃圾回收算法,为标记-清楚算法,优点是并发收集,停顿小. 2.G1算法 1.9后默认的垃圾回收算法,特点保持高回收率的同时减少停顿.采用每次只清理一部分,而不是清理全部的增量式清理,以保证停顿时间不会过长 3.ZGC 1.11中提供的高效垃圾回收算法,针对大堆内存设计,可以处理TB级别的堆,可以做到10ms以下的回收停顿时间. 考察点 深入理解JVM内存模型 了解类加载机制

阿里高级面试题 2019

馋奶兔 提交于 2020-11-10 05:35:20
阿里内推Java一面题目 数据库 1. 使用mysql索引都有哪些原则??索引什么数据结构??B+tree 和 B tree 什么区别?? 1、 对于查询频率高的字段创建索引; 2、 对排序、分组、联合查询频率高的字段创建索引; 3、 索引的数目不宜太多 原因:a、每创建一个索引都会占用相应的物理控件;    b、过多的索引会导致insert、update、delete语句的执行效率降低; 4、若在实际中,需要将多个列设置索引时,可以采用多列索引 如:某个表(假设表名为Student),存在多个字段(StudentNo, StudentName, Sex, Address, Phone, BirthDate),其中需要对StudentNo,StudentName字段进行查询,对Sex字段进行分组,对BirthDate字段进行排序,此时可以创建多列索引 index index_name (StudentNo, StudentName, Sex, BirthDate); #index_name为索引名 在上面的语句中只创建了一个索引,但是对4个字段都赋予了索引的功能。 创建多列索引,需要遵循BTree类型, 即第一列使用时,才启用索引。 在上面的创建语句中,只有mysql语句在使用到StudentNo字段时,索引才会被启用。 如: select * from Student where