首页 文章 精选 留言 我的

精选列表

搜索[学习],共10000篇文章
优秀的个人博客,低调大师

Docker学习之安装JDK、Tomcat、Mysql

一.docker部署JDK 1.下载适当的jdk版本 docker pull java:8//docker pull NAME:TAG(version) 2.查看下载到的镜像 docker images //查看所有docker下载到的镜像 3.运行java jdk镜像到容器 /** ** run 启动一个镜像容器 ** -d 后台运行该容器 ** -I 以交互模式运行容器,通常与 -t 同时使用 ** -t 为容器重新分配一个伪输入终端 */ docker run -d -it --name java java:8 4.进入容器查看jdk 到这里,我们已经创建了一个jdk的docker容器。接下来我们要进入容器,查看安装的jdk版本以及其他操作。进入docker容器有几种方式,我们分别来看一下: 1.docker attach [容器ID(缩写/全称),容器名称]:docker自带方式,但是当多个窗口同时attach到同一个容器时,所有的窗口都会同步的显示,假如其中的一个窗口发生阻塞时,其它的窗口也会阻塞,并且在使用exit退出容器时会导致正在运行的容器停止。因此,一般不建议使用此方式进入容器。如果使用该方式,退出容器时不能使用exit和Ctrl+D,应该使用Ctrl+P+Q来退出,这样不会导致容器停止。 2.docker exec -it [容器ID(缩写/全称),容器名称] /bin/bash :这种方式是经常使用的操作。-I -t操作与前面说的docker run命令的-it操作一致 上面就是Docker中安装JDK过程,参考文章link 二、Docker部署Tomacat,Mysql,部署过程与安装JDK一样 1.docker pull tomcat:8[mysql:5] 2.docker images 3.docker run -d -it --name [容器名] [image]

优秀的个人博客,低调大师

第二天学习Java

一、复习: 计算机语言的发展迭代史 第一代:机器语言第二代:汇编语言第三代:高级语言 面向过程:C,Pascal、Fortran 面向对象:Java,JS,Python,Scala,。。。 Java语言的特点: 面向对象 两个要素:类、对象 三个特征:封装、继承、多态 健壮性去除了C语言中的指针;自动的垃圾回收机制(仍然会出现内存溢出、内存泄漏)跨平台性write once,run anywhere归功于JVM JDK的下载安装 下载:官网安装软件的路径中不能包含空格path环境变量:windows操作系统执行命令所搜寻的路径不看资料,手动编写类helloworld程序class test{public static void main(String[] args){ System.out.println("This is a test");}} 二、关键字和保留字 关键字 定义:被Java语言赋予了特殊含义,用作专门用途的的字符串(单词)特点:关键字中所有字母都为小写官方地址: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/_keywords.html 保留字 现有Java版本尚未使用,但以后版本可能会作为关键字使用、自己命名标志符时要避免使用这些保留字goto,const 三、标识符 Java对各种变量、方法和类等要素命名时使用的字符序列称为标志符技巧:凡是自己可以起名字的地方都叫标识符 标识符定义规则 1、由26个英文字母大小写,0-9,_或$组成2、数字不可以开头3、不可以使用关键字和保留字,但能包含关键字和保留字4、Java中严格区分大小写,长度无限制5、标识符不能包含空格如果不符合以上规则,编译不通过。 标识符命名规范 命名规范并不是必须遵守的,一般建议遵守,否则不利于区分。1、包名:多单词组成时,所有字母都小写,xxxyyyzzz2、类名、接口名:多单词组成,所有单词首字母大写,XxxYyyZzz3、变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写,xxxYyyZzz4、常量名:所有字母都大写,多单词时,每个单词用下划线连接,XXX_YYY_ZZZ5、命名时,尽量有意义,做到见名知意6、Java采用unicode字符集,因此标志符也可以使用汉字声明,但是不建议使用。例子:编写一个变量并输出class OutPut{public static void main(String[] args){ int testNumber=8; System.out.println(testNumber);}}注:println输出变量时,不需要用“”。 四、变量 变量的概念:内存中的一个存储区域;该区域的数据可以在同一类型范围内不断变化;变量是程序中最基本的存储单元,包含变量类型、变量名和存储的值变量的作用:用于在内存中保存数据。使用变量的注意事项:1、先声明和赋值,后使用(不声明或不赋值程序会报错);2、使用变量名来访问这块区域的数据;3、变量的作用域为其定义所在的一对{}内;4、变量只有在其作用域内才有效;5、同一个作用域内,不能定义重名的变量。定义变量格式: 数据类型 变量名 = 变量值;例如 int myNumber=1001也可以int myNumber;myNumber=1001; 基本数据类型 不同的数据类型,在内存中分配不同大小的内存空间。数据类型包括基本数据类型(primitive type)和引用数据类型(reference type)。基本数据类型:数值型(整数类型(byte、short、int、long)、浮点类型(float、double),字符型(char),布尔型(boolean)。引用数据类型:类(class)、接口(interface)、数组(array[ ])。java是强类型,JS是弱类型(自动判断)整型byte 1字节=8bit,范围 -128-127short 2字节 ,范围 -32768-32767int 4字节 ,范围 -2147483648-2147483647,约21亿long 8字节 ,范围 -2的63次幂-2的63次幂减1,赋值必须以l或L结尾bit是计算机中的最小存储单元,byte是计算机中的基本存储单元。1个字节8位。通常定义整型变量为int。浮点类型float 4字节,单精度,尾数可以精确到7位有效数字。很多情况下很难满足需求。float类型结尾要以f或F结尾double 8字节,双精度,精度是float的两倍,通常采用此类型。字符型char 只能是一个字符,赋值时用单引号,可以是英文、中文、日文等;也可以赋值转意字符例如/n(换行)、/t(制表符)等;可以用unicode编码方式赋值,例如u0043表示C,这样的方式很少使用。字符输出时如果出现乱码,可能是存储Java程序的格式跟JDK输出格式不一样,解决办法为保存Java代码时选择ANSI。布尔类型:boolean只能取两个值之一:true、false布尔型常在条件判断、循环结构使用。为转意字符,例如要输出“”或n时,在前面加转意字符。编写小程序输出各种数据class VariableTest{ public static void main(String[] args){ byte testByte = -127; short testShort = -30000; int testInt = 6000000; long testLong = 999999999999l; float testFloat = -12.88f; double testDouble = 8888888.8888; char testChar = 'a'; char testUnicodeChar = '\u0043'; boolean testBoolean = true; System.out.println(testByte); System.out.println(testShort); System.out.println(testInt); System.out.println(testLong); System.out.println(testFloat); System.out.println(testDouble); System.out.println(testChar); System.out.println(testUnicodeChar); System.out.println(testBoolean); if(testBoolean){ System.out.println("你不能参加单身派对"); } else { System.out.println("你可以多谈谈女朋友"); }}} 基本数据类型变量间转换 基本数据类型运算规则(7种基本数据类型,不包含boolean)1、自动类型提升当容量小的数据类型变量与容量大的数据类型的容量做运算时,结果自动提升为容量大的数据类型,这里的大小指的数据类型的大小。byte、short、char->int->long->float->double。byte、short、char运算结果(即便相同类型)为int类型例子class Boost{public static void main(String[] args){char testChar = 'a';byte testByte = 10;int testInt = testChar+testByte;System.out.println(testInt);}}2、强制类型转换强制类型转换:自动类型提升运算的逆运算强制转换需要使用强转符()。强制类型转换采用截断方式(不是四舍五入),可能会有精度损失。例子$ vim Force.javaclass Force{ public static void main(String[] args){ float testFloat=12.9f; int testInt=(int)testFloat; System.out.println(testInt);}}$ javac Force.java$ java Force12 注:整型常量,默认类型为int型;浮点型常量,默认类型为double型。

优秀的个人博客,低调大师

spring boot学习4 多环境配置

说明: 在企业中,一个项目一般都有测试环境(test) 、开发环境(dev)、生产环境(pro)等等。在每个环境中,配置信息会不一样的。比如数据库、静态资源文件位置等都会不一样的。 那么使用spring boot怎么处理这些呢? 假设现在我们的开发环境端口是:“ 测试环境端口是: 生产环境端口为: 创建如下图的配置文件: 说明: 1: dev是开发环境的 2:pro是生产环境的 3:test是测试环境的 4:是默认配置文件。 那么现在我想要访问测试环境。也就是端口是8081的怎么配置? 需要在application.properties中配置: 使用如下: spring.profiles.active= 需要的环境名称 说明: 环境名称就是application- 后面对应的 如上图,说明我们配置的是测试环境的。也就是端口是8081.那么对不对呢? 个人博客:www.kaigejava.com 我们启动项目:查看打印日志: 直接切换到生产环境(pro)端口是8888的 保存后,在看打印日志。 可以看到已经切换端口是8888。 这样就可以在不同环境使用不同的配置文件了。

优秀的个人博客,低调大师

前端学习笔记(3) - JavaScript对象分类

JavaScript中的对象分类 宿主对象(host Objects):由 JavaScript 宿主环境提供的对象,它们的行为完全由宿主环境决定。 内置对象(Built-in Objects):由 JavaScript 语言提供的对象。 固有对象(Intrinsic Objects ):由标准规定,随着 JavaScript 运行时创建而自动创建的对象实例。 原生对象(Native Objects):可以由用户通过 Array、RegExp 等内置构造器或者特殊语法创建的对象。 普通对象(Ordinary Objects):由{}语法、Object 构造器或者 class 关键字定义类创建的对象,它能够被原型继承。 函数对象与构造器对象 JavaScript中使用对象来模拟函数与构造器。JavaScript 为这一类对象预留了私有字段机制,并规定了抽象的函数对象与构造器对象的概念。 函数对象的定义是:具有 [[call]] 私有字段的对象,构造器对象的定义是:具有私有字段 [[construct]] 的对象。我们可以这样说,任何对象只需要实现 [[call]],它就是一个函数对象,可以去作为函数被调用。而如果它能实现 [[construct]],它就是一个构造器对象,可以作为构造器被调用。 程序员使用function关键字创建出来的对象同时拥有[[call]]、[[construct]]属性,所以既可以被当做函数调用也可以当做构造器,只不过它们的行为总是相似的。当返回值为对象时函数对象与构造器对象的作用是相同的。当作为构造器对象使用时过程如下: 以 Object.protoype 为原型创建一个新对象; 以新对象为 this,执行函数的 [[call]]; 如果 [[call]] 的返回值是对象,那么,返回这个对象,否则返回第一步创建的新对象。 es6中的=>函数只能被当做函数调用。

优秀的个人博客,低调大师

前端学习笔记(2) - JavaScript面向对象

javaScript是不是面向对象语言? JavaScript(es6之前)有对象的概念,却没有类的概念,JavaScript对象可以任意添加属性,而java、c++等其他语言却不能。以至于有些人认为JavaScript并非是面向对象的语言,而是基于对象的语言。 实际上JavaScript无疑是面向对象的语言,只不多例如java、c++等语言才用的是“类”的方式来描述对象,这也是最为成功的描述对象方式。但是javaScript采用的较为冷的原型来描述对象的方式。但是由于某些原因JavaScript在原型运行时的基础上加入了例如new、this等语言特性使其看起来更像java。 基于原型的面向对象 “基于类”的编程提倡使用一个关注分类和类之间关系开发模型。在这类语言中,总是先有类,再从类去实例化一个对象。类与类之间又可能会形成继承、组合等关系。类又往往与语言的类型系统整合,形成一定编译时的能力。 “基于原型”的编程看起来更为提倡程序员去关注一系列对象实例的行为,而后才去关心如何将这些对象,划分到最近的使用方式相似的原型对象,而不是将它们分成类。基于原型的面向对象系统通过“复制”的方式来创建新对象。一些语言的实现中,还允许复制一个空对象。这实际上就是创建一个全新的对象。JavaScript的原型对象实现方式并不是真的去复制一个对象,而是使新对象持有一个原型对象的引用。 JavaScript的原型系统其实概括起来如下: 如果所有对象都有私有字段 [[prototype]],就是对象的原型; 读一个属性,如果对象本身没有,则会继续访问对象的原型,直到原型为空或者找到为止。 这个模型在 ES 的各个历史版本中并没有很大改变,但从 ES6 以来,JavaScript 提供了一系列内置函数,以便更为直接地访问操纵原型。三个方法分别为: Object.create 根据指定的原型创建新对象,原型可以是 null; Object.getPrototypeOf 获得一个对象的原型; Object.setPrototypeOf 设置一个对象的原型。 基于类的面向对象 在es6的新语法中引入了class关键字,并从标准中删除了所有与[[class]]相关的私有属性,new与function的怪异搭配终于可以退休了。基于类的面向对象正式成为JavaScript官方的编程范式。(JavaScript中基于类的面向对象编程实际上是基于原型面向对象编程的语法糖) class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' makes a noise.'); } } class Dog extends Animal { constructor(name) { super(name); // call the super class constructor and pass in the name parameter } speak() { console.log(this.name + ' barks.'); } } let d = new Dog('Mitzie'); d.speak(); // Mitzie barks.

优秀的个人博客,低调大师

链表学习--单链表-增删查实现

链表 在大多数情况下,我们将使用头结点(第一个结点)来表示整个列表。 如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。 我们按索引来访问元素平均要花费 O(N) 时间,其中 N 是链表的长度。 实现如下功能 : get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。 addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。 addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。 deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。 代码如下: 一、定义单链表的节点 package com.leetCode.study.Demo_2019_8_8_Linked; /** * 单链表的定义 * @author liudongting * @date 2019/8/8 10:45 */ public class SinglyListNode { //val 是当前节点的值 int val; //next 是指向下一个节点的指针/引用 SinglyListNode next; //带参构造函数 SinglyListNode(int x) { val = x; } } 二、链表 package com.leetCode.study.Demo_2019_8_8_Linked; /** * @author liudongting * @date 2019/8/8 10:56 */ public class List { static SinglyListNode head; /** * * addAtTail(val) * 将值为 val 的节点追加到链表的最后一个元素。 */ public void addAtTail(int val){ SinglyListNode singlyListNode = new SinglyListNode(val); //如果头节点为空,添加到头节点 if(head == null){ head = singlyListNode; return; } //从头节点开始 SinglyListNode temp = head; //从头节点开始判断,是否有下一个节点,找到最后一个节点 while (temp.next != null){ temp = temp.next; } //最后一个节点的指针指向新加入的节点 temp.next = singlyListNode; } /** * 获取链表中第 index 个节点的值。如果索引无效,则返回-1。 * @param index */ public int get(int index){ int length =0 ; //从头节点开始 SinglyListNode temp = head; //如果结点不为空,判断该节点的索引是否和要求的索引一致。相同则返回,不同继续; while (temp != null) { if(length==index){ return temp.val; } length++; temp = temp.next; } return -1; } /** * 在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。 * @param val */ public void addAtHead(int val){ SinglyListNode singlyListNode = new SinglyListNode(val); //如果头节点为空,添加到头节点 if(head == null){ head = singlyListNode; return; } //创建临时节点,保存头节点的值 SinglyListNode temp = head; //新节点的值,给头结点 head=singlyListNode; //新的头结点的下一个元素指向原来的头结点、 head.next = temp; } /** * 在链表中的第 index 个节点之前添加值为 val 的节点。 * 如果 index 等于链表的长度,则该节点将附加到链表的末尾。 * 如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。 * * */ public void addAtIndex(int index,int val){ if(index<0){ addAtHead(val); return; } if(linkListLength()==index){ addAtTail(val); return; } if(index>linkListLength()){ return; } SinglyListNode singlyListNode = new SinglyListNode(val); int length =0 ; //从头节点开始 SinglyListNode temp = head; //如果结点不为空,判断该节点的索引是否和要求的索引一致。相同则返回,不同继续; while (temp != null) { if((length+1)==index){ //index 前一个节点的指针指向的节点,即index处的节点 SinglyListNode preNode = temp.next; //index 前一个节点的指针 指向 新的节点 temp.next = singlyListNode; //新节点的下一个指针指向 index节点 singlyListNode.next= preNode; return; } length++; temp = temp.next; } } /** * 获取链表的长度 * @return */ public int linkListLength() { int length = 0; //临时节点,从首节点开始 SinglyListNode temp = head; // 找到尾节点 while (temp != null) { length++; temp = temp.next; } return length; } /** * 如果索引 index 有效,则删除链表中的第 index 个节点。 * @param index */ public void deleteAtIndex(int index){ int length = 0; //临时节点,从首节点开始 SinglyListNode temp = head; if(index==length){ head=head.next; } // 找到尾节点 while (temp != null) { if((index-1)==length){ SinglyListNode indexNode =temp.next; SinglyListNode nextNode = indexNode.next; temp.next = nextNode; return; } length++; temp = temp.next; } } public static void main(String[] args) { List list = new List(); // 添加元素 list.addAtTail(2); //在头结点添加元素 list.addAtHead(3); //在指定位置添加元素 list.addAtIndex(1,4); //根据索引删除元素 list.deleteAtIndex(2); //获取链表的长度 list.linkListLength(); System.out.println("222"); System.out.println(" 获取链表的长度 list.linkListLength() : " +list.linkListLength()); System.out.println(" 获取链表的某个元素 list.get(1) : " + list.get(2)); } } [github 获取更多源码] https://github.com/florarose/biji欢迎关注公众号,查看更多内容 :

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册