后端基础阶段技术总结

JAVA概述

1、java的历史

Oak(橡树)语言,由Green开发团队开发,主要用于微型嵌入式设备编程,第一次提出了开源协议 。

Java之父 詹姆斯.高斯林

经历过Sun公司接手之后,最终由Oracle收购,1995年语言更名为Java,正式发布JDK1.0

1996年 Java(此时JDK1.2)应对发展需求,分为三个重要方向:

  1. J2SE : Java标准语法(这是学习Java开发体系的必备基础)

  1. J2ME : 微型嵌入式领域的编程(例如:塞班系统应用,但后来没有普及)

  1. J2EE :企业级开发(使用Java语言开发服务器)

(J2SE---->Java SE, J2ME---->Java ME, J2EE---->Java EE)

2006年JDK1.6开源所有的代码

2、JDK安装

  1. 进入JDK官网,找到JDK11的下载地址:

  1. 选中对应的 系统 以及 下载版本

  1. 下载完成后,直接进行安装

  1. 安装后,可以在控制台查看是否安装成功

WIN+R键启动运行窗口

在运行窗口输入cmd,并回车“确认”

在命令提示符窗口中输入java -version

说明java环境已经安装完成

3、JDK卸载

1.在windows搜索中,找到控制面板

2.双击打开控制面板,在右上角启用类别,选择程序中的卸载程序选项

3.在卸载程序页面中查看需要卸载的JDK文件,并双击

4.卸载完成后可以查看安装路径,是否卸载干净

4、JDK版本切换

1.启动运行窗口,并输入regedit

2.在注册表中逐一打开 HKEY_LOCAL_MACHINI , SOFTWARE , JavaSoft

3.在Java Plug-in中修改主体版本即可

IDEA的下载

认识JetBrains

  1. 官网:JetBrains: 软件开发者和团队的必备工具

  1. 目前在世界上的主流开发软件:IDEA 、WebStorm 、PyCharm

  1. 特点:1)智能的代码提示功能(就像我们使用的输入法)

2)最新的开发支持(github 、框架 、辅助插件 、代码测试······)

3)代码的自动保存(不需要程序员自己手动保存)

安装IDEA

  1. 下载最新版本的idea

IntelliJ IDEA – 领先的 Java 和 Kotlin IDE (jetbrains.com.cn)

  1. 下载完成后,直接安装IDEA即可

IDEA和webstorm激活方案(最新版)

1、进入JETBRA.IN CHECKER | IPFS

2、选中可用代理任意链接进入该网站,点击如图所示内容下载 jetbra.zip ,不要关闭该网站

3、下载后为一个随机文件名称(如图)

请将此文件的名称更改为可用的简单名称,并解压至对应目录,如图示

(请注意!该文件主要用于激活使用 ,删除后,激活也就失效)

里面的文件结构如图

4、打开vmoptions文件

如果你要激活IDEA,则修改 idea.vmoptions

如果你要激活webstorm,则修改 webstorm.vmoptions

修改内容如下:(设置到对应ja-netfilter.jar 的路径),其中我设置的是D盘下的路径,大家可以根据自己的实际情况设置。

5、关闭IDEA或者webstorm后再重启

6、打开之前的网站复制激活码

7、将激活码填写在需要激活的webstorm或者IDEA上,直接激活(如图)

(此方法可以激活JetBrains下的所有的产品)

IDEA环境的认识

顶部

File:

点击File后会打开菜单

  • New :新建内容(文件、文件夹、项目等)

  • Open :打开指定文件或者指定的目录

  • Open Recent :打开最近打开过的文件或者目录

  • Class Project :关闭当前项目窗口

  • Settings :设置整个IDEA的环境

  • Project Structure :设置项目

  • SavaAll :保存所有内容

  • Exit :退出IDEA

View

查看IDEA环境中的视图设置

Code

对Code进行分析和管理

Refactor

对文件进行重命名、移动、复制

Build

对文件进行构建

Run

运行文件 或者 开启DEBUG模式

Tools

内部或者外部工具的使用

Git

对代码进行git分布式管理

Window

窗口工具

Help

帮助

中部

项目目录区域

编码或者代码显示区

底部

TODO :展示需要去做的任务

Problems : 项目中出现的问题

Git :分布式托管

Terminal :控制台

Profiler :性能测试平台

Run : 运行后的结果展示

IDEA中新建项目与文件

新建一个Java项目

1、在项目界面选择新建一个项目

2、在创建项目的界面选择对应的项目类型进行创建

3、选择对应的JDK版本后,选择Next

4、接着选择Next默认内容后,来到项目名称的定义页面

5、在底部的设置中可以看到more_settings,选择Finish后建立该项目

新建一个文件

1、选择需要创建的文件位置(比如此刻我们需要创建对应的内容到day01下,因此我们选中day01文件夹)

2、选择day01下的src文件

3、右键新建(package)包名

4、我们暂时都将包名命名为com.js,后期我们会解释这里的package是什么

5、新建好package之后,我们选中新建好的package,新建Java Class

6、采用驼峰法为这个文件命名

7、 完成新建流程

新建目录与Java文件

新建目录

点击顶部主目录,右键新建一个文件夹

新建Java代码文件

1、在day01下方新建一个src目录

2、在src下新建一个File文件,Hello.java

如何运行.java文件

1)打开IDEA底部的Terminal

2)通过cd命令进入src

3)运行.java文件

4).java的代码 Hello.java

public class Hello{public static void main(String[] args){System.out.println("Hello World");
}
}

新建Module

1、新建Module

2、新建一个day01的Module将原来的day01覆盖

3、覆盖之后(如图)

新建Java文件的注意点

1、在src下新建一个package 选中src右键 --> New --> Package

2、Package(包)的命名: | com、cn、org... | 名称缩写、公司缩写 | 项目名称 | 例如: com.fs.test

3、Package是什么,文件夹(目录)结构 com.fs.test com目录下有fs目录,fs目录下有test目录

  1. 选中Package右键,新建一个java Class文件 5、新建的java文件的名称(尽量使用全英文)的首写字母必须要大写。 例如:Demo01

JDK是什么

JDK 全称是 Java Development Kits 的缩写,翻译过来为Java开发工具包

在JDK中有运行.java文件的虚拟机(解释器)

知识点:

1、java的源文件 开发文件是以什么方式结尾 .java

2、虚拟机 解析.java文件

我们接下来一一解答以下问题:

1、什么是虚拟机

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统

比如:我们在电脑中用的手机模拟器,就是一个由软件模拟的虚拟机

在Java中的虚拟机,指的是专门为了解析.java文件存在的一种软件

虚拟机,英文为 Virtual Machine,而Java虚拟机被人成为JVM(即Java Virtual Machine)

2、JDK中除了虚拟机还有哪些内容

JRE : Java Runtime Envirment (Java运行时环境 ,运行.java文件的核心内容)

JDK 包含JRE,JRE中有JVM。

3、虚拟机运行.java文件的原理

Java11 之前

java命令:将.java文件编译成.class文件(这里的.class为字节码文件,机器是无法识别的)

javac命令:将.class文件解释成对应的二进制命令

Java11 后

java命令:将.java文件直接解释成对应的二进制命令

所以我们既可以说Java是一门编译解释语言,也可以说是一门解释语言。

(区别与编译语言)

4、什么是解释型语言

首先要了解两个概念:编译语言、解释语言

1、编译语言是指定文件,编译到指定位置,生成指定的二进制文件,特点:效率高、速度快 (C语言)

2、解释语言是指定文件,解释到任何位置,生成指定的二进制文件,特点:跨平台性好

Java的数据类型

Java的数据类型分为

  • 基本数据类型

  • 引用数据类型

基本数据类型包括

  • 数值类型 :byte , short , int , long , float , double

  • 字符类型 :char

  • 布尔值类型 :boolean(true , false)

基本数据类型的表示方式

基本数据类型介绍

代码编写简介

简要介绍

public 公共的,公有的(可以被其他文件访问)

class + 类名 : 定义一个类

重点:public 修饰了class,那么类的名称必须和.java文件名称保持一致

class没有public修饰,那么类名可以任意

在同一文件中可以定义多个类,但public的类只能有一个

入口方法;main方法

重点:1、入口方法,除了形参的名称可以变之外,其余内容不可变

2、java文件运行起来时,一定会执行main方法(入口方法)

形参:args

代码的结尾要使用;(英文分号)

变量

简而言之,一个可以装载”字面量“的容器

变量的声明,就是在内存中申请一块想要数据类型的空间,并对其命名的过程

声明变量

语法 :数据类型 变量名称;

如果要同时定义多个相同类型的变量,可以: 数据类型 变量名1, 变量名2.......;

变量的初始化

语法 :变量名称 = 数据值(字面量)

(在方法内,如果一个变量仅仅只声明,那么它不可以被使用,只有被初始化后才能被使用。)

重点 :

数据类型 要与数据值(字面量)保持一致

数据类型(基本数据类型):byte short int long float double char boolean

保持一致:int整数类型 === 2整数类型

eg :

int c = "张三"; //编译错误:有红线的代码区域(int是整数型对应的应该是整数 , “张三”是字符串)

变量的名称,规则(前、中后):

1、变量名称的开头只能以_或$(¥ 人民币),英文字母 定义

2、变量名称的中间只能以_或$(¥ 人民币),英文字母,数字 定义

补充 :

1、变量不能重名

2、变量名称的大小写敏感,字母大小写对Java来说,是不同的(敏感)

3、变量可以多个一起定义

注释

文档注释

可以注释一个方法,或者一个类

快捷方式: /** + Enter

单行注释

注释一行内容(内容上边,或者结尾右侧)对变量或者常量注释,对某一行代码进行解释

快捷方式: Ctrl + /

多行注释

注释一个代码片段(方法、方法中的某几行)

快捷方式 /* + Enter

标识符

标识符的定义:

为 ”变量、类(接口)、方法“ 进行命名的符号

标识符构成:

1、标识符的开头只能以_、$、字母

2、标识符的中间和结尾以_、$、字母、数字为主要内容

3、不能以关键字或者特殊字符命名,(长度、大小写、换行)

4、见名知意(对变量进行特殊的名称定义,会帮助我们或者其他开发者理解程序功能,翻译软件)

标识符常见的命名方式:

  1. 驼峰法

eg : 我的苹果 ==> my apple ==> myApple MyApple

小驼峰法 首写字母小写 主要用于变量、方法命名

大驼峰法 首写字母大写主要用于类 或者接口命名

2、下划线隔断法

eg : 我的苹果 ==> my_apple

关键字 :50个常见关键字

其中有5个常见的保留字:goto const (true,false,null)

goto const 已经被弃用 true,false,null 作为值的类型存在java中

基本数据类型

整数类型:int (byte short long)

结论:无论数值类型以何种方式表示,都是以十进制输出

所有整数数值类型默认为int

整数类型:long

为什么要用long类型? int数值范围无法表示的情况下

注意:long类型数值后需要加上L或者l

eg :

浮点类型:float

注意:float定义浮点数类型时,需要加上F或者f

浮点类型: double

所有小数数值类型默认为double

科学进制E : E表示10的多少次方

字符类型:char (基本数据类型)

char类型只能用单引号,单引号中只有一个字符或者数字

转义字符

定义 :具有特殊的格式意义的字符

\n 换行 \t 制表符 \r 回车

基本数据类型转化

基本数据类型转化的原因:数值之间表示数值范围的大小关系

数值范围大小:byte < short < int < long < float < double

整数类型 byte < short < int < long

大范围的数值类型 ==> 小范围的数据类型 :强制转化

口诀:大转小要强转

注意!运算方向是从右往左

小范围的数值类型 ==> 大范围的数据类型 :自动转化

口诀:小转大自动转

注意!运算方向是从右往左

浮点型由于表示数的范围有特殊方式(不同于整数),所以 int < long < float

整数值的默认类型是int,小数值的默认类型是double

补充:

1、char类型右侧是ASCII码的编码数值,而不是简单的int类型

2、数值类型的值不可以强制转化为boolean值

运算符

算数运算符

两数相除:

1、两数都是整数类型,求整数商

2、两数任意一个是浮点数,求浮点数的商

注意

  • 如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除,后加减

  • 运算时最终结果的数据类型,以所以参与运算的操作数中所占字节最大的类型为准

关系运算符

需要两个操作数参与

注意

  • ==用于判断相等,=用于赋值

  • ==用于比较两个原始类型的值或引用类型的内存地址

  • 关系运算的结果为true/false

逻辑运算符

逻辑运算符的左右两侧,必须是布尔表达式

&& 与:一假即假 (当所有布尔表达式中有为false的条件,结果必然为false)

||或:一真即真(当所有布尔表达式中有为true的条件,结果必然为true)

!非:!取相反的布尔表达式的值

注意:非的一侧必须是布尔表达式

短路与:&&

条件1 && 条件2 && 条件3 ...

如果”条件1“为false,那么后续的条件就没有判断的必要

短路或 ||:

如果前面的条件为真,那么后续的条件没有必要判断

补充:位运算符

逻辑与:&

条件1 & 条件2 & 条件3 ...

即便”条件1“为false,后续的条件仍要继续判断

逻辑或 |:

即便前面的条件为真,后续的条件依旧需要判断

注意

  • &&和||也称为短路运算。如果能通过第一个表达式觉得最终的结果,则不用判断第二个表达式。

  • 通常情况下,使用&&和||提高代码执行效率

与或的混合判断:

逻辑与 的优先级高于 逻辑或,所以先执行与运算

注意:非运算 高于”与,或“运算。(仅次于括号的优先级)

赋值和复合赋值运算符

赋值运算符 = :1、优先等级最低 2、从右往左运算

赋值运算的扩展运算符: += -= /= *= %=

注意

复合赋值运算的流程是:

将符号两端的整体进行对应的算数运算后,将结果赋值给符号左侧的变量中

自增自减运算符

只有一个操作数参与运算,称为单目运算符

b(变量)的值,与b++,++b (表达式)的值是有区别的

++,--在变量”左侧“和“右侧”的区别

判断依据: 看运算符在前,还是变量在前

如果运算符在前,则先对值进行自加,再将值赋值给左侧

如果是变量在前,则先把值赋值给左侧,再自加

注意

  • a++或++a相当于a+=1或a=a+1。–同理

  • 如果++或–独立成行使用,无论符号在前在后,都将结果+1或-1

  • 如果++或–不是单独成行

  • 符号在前,先+1或-1计算后在使用值

  • 符号在后,先使用值后在+1或–1计算

运算符的优先级

小括号>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>条件运算符>>赋值/复合赋值运算符

多种数据类型参与运算,其结果以字节最大的为准。

字符串拼接符

重点:

字符串拼接符的判断依据:+ 的任意一侧有字符串出现时,它就是拼接符

字符串拼接符 与普通的加减运算的优先级一致

拼接符的使用会直接消耗内存,执行效率低

运算符优先级

比较

数值类型比较

public class Demo1 {public static void main(String[] args) {//数值类型比较int a = 1;int b = 2;System.out.println(a > b);//falseSystem.out.println(a >= b);//falseSystem.out.println(a < b);//trueSystem.out.println(a <= b);//trueSystem.out.println(a == b);//falseSystem.out.println(a != b);//true//a > b 表达式值 true false :布尔表达式}
}

字符类型的比较

public class Demo1 {public static void main(String[] args) {//字符类型比较char c1 = 'a';//97char c2 = 'b';//98//字符类型的比较是通过ASCII所对应的十进制编码进行比较System.out.println(c1 > c2);//falseSystem.out.println(c1 < c2);//trueSystem.out.println(c1 > 96);//true}
}

字符串类型的比较

public class Demo1 {public static void main(String[] args) {//字符串类型的比较:字符串不能用大小关系比较String s1 = "a";String s2 = "b";System.out.println(s1 == s2);System.out.println(s1 != s2);}
}

位运算比较

& 按位与 :二进制比较,对位都为1结果为1

| 按位或 :二进制比较,对位都为0结果为0

^ 异或: 二进制比较,对位不相同结果为1

交换两个数的值(1)

public class Demo1 {public static void main(String[] args) {//交换两个数的值int a = 3;int b = 7;a = b;// b=7 a=7b = a;// a=7 b=7int tmp;//需要定义一个中间变量tmp = b;b = a;a = tmp;System.out.println("a = " + a);System.out.println("b = " + b);}
}

交换两个数的值(2)

public class Demo1 {public static void main(String[] args) {//交换两个数的值int a = 3;int b = 7;a = a+b;// a=10 b=7b = a-b;// a=10 b=3a = a-b;// b=3 a=7System.out.println("a = " + a);System.out.println("b = " + b);}
}

表达式

有运算符参与的运算公式

算数表达式

赋值表达式

(赋值运算的优先等级最低,从右往左运算)

布尔表达式

(最终结果是boolean)

逻辑表达式

(结果是boolean)

三目运算表达式

三目运算表达式结构 :条件 ? 选项1 : 选项2

返回值是选项1或者选项2的值

描述:当条件成立时,返回选项1的值,否则返回选项2的值

eg:

问题:

public class Demo1 {public static void main(String[] args) {//问题:现有 a b c 三个数,判断谁最大? 谁最小?int a = 1;int b = 2;int c = 3;//原理:首先判断a b谁最大,然后再将 a b中的最大数跟c进行比较
//        int max = a > b ? a : b;
//        max = max > c ? max : c;int max = a > b ? a : b > c ? a > b ? a : b : c;System.out.println("最大值:" + max);int min = a < b ? a : b;min = min < c ? min : c;System.out.println("最小值:" + min);}
}

条件语句

if语句(如果)

格式:if(布尔表达式){ 执行语句 }

描述:如果布尔表达式成立,就会执行“执行语句”,否则直接跳过这一次判断

案例: 大于等于60分:成绩及格

public class Demo1 {public static void main(String[] args) {double score = 90;if(score >= 60){System.out.println("成绩及格");}System.out.println("结束");}
}

if...else 语句

格式:if(布尔表达式){ 执行语句 }else{ 执行语句 }

描述:如果布尔表达式成立,就会执行if中的“执行语句”,否则执行else中的“执行语句”

public class Demo1 {public static void main(String[] args) {double score = 90;if(score >= 60){System.out.println("成绩及格");}else{System.out.println("不及格");}}
}

if...else if 语句

格式:if(布尔表达式){ 执行语句 }else if(布尔表达式){ 执行语句 }

描述:

如果if中布尔表达式成立,就会执行if中的“执行语句”

如果else if中布尔表达式成立,就会执行else if中的“执行语句”

随着条件的增多,我们可以增加else if的数量

案例:大于等于90 :优秀 80~90:良好 60~80:合格 ~60:差

public class Demo1 {public static void main(String[] args) {double score = 90;if(score >= 90){System.out.println("优秀");}else if(score >= 80){System.out.println("良好");}else if(score >= 60) {System.out.println("合格");}else{System.out.println("差");}}
}

switch语句

语句格式:switch(数据值或变量){ case 值1:...; case 值2 :...;... }

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {//选项卡:选择1 选择2 选择3...int n = 2; //选择的数据变量switch (n){case 1:System.out.println("n为1");break;//通过break可以终止整个switch语句case 2:System.out.println("n为2");break;//通过break可以终止整个switch语句case 3:System.out.println("n为3");break;//通过break可以终止整个switch语句}System.out.println("switch语句执行完成");}
}

注意:1、switch括号中一般是变量,变量需要指定特殊的数据类型(byte short int char String(Character))

switch不可以设置的类型有:long,double,float

2、有无break的情况(break 跳出(停止)switch语句),没有break情况,程序会继续往后执行。

3、关于if语句与switch的区别:switch不能判断范围条件.

4、default 除了case之外的其他条件,(default为了程序健壮性)

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int m = 5;//选择的数据变量switch (m){case 1:System.out.println("1");break;case 2:System.out.println("2");break;case 3:System.out.println("3");break;default://不存在前面所有条件的情况System.out.println("其它数字");break;}}
}

循环

循环是什么:解决重复代码问题

举例:重复打印Hello World 50遍

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {String n ="hello world";for(int i = 0; i < 50; i++){System.out.println(i+":"n);}}
}

循环的特殊结构

死循环:循环没有结束条件

for循环

for循环格式 for(初始化内容;结束循环条件;变化方式){...}

初始化内容:int i = 0

结束循环条件: i < 5 (布尔表达式)

变化方式: i++

eg:

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {for(int i=0,j=10;i < 9 && j > 3;j--,i++){System.out.println(i + ":" + j);}}
}

for循环执行顺序

九九乘法表 for循环嵌套的代表案例

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {//1 ~ 9// i 行for(int i = 1; i <= 9;i++){// j 列for(int j = 1;j <= i;j++){//\t制表符,让所有加制表符的内容对齐System.out.print(i + " x " + j + " = " + i * j + "\t");}System.out.println();}}
}

while 循环

while循环格式 while(布尔表达式){ ... }

eg:

import java.util.Scanner;

public class Demo1 {

public static void main(String[] args) {

int a = 1;

while (a < 10){

a++;

System.out.println(a);

}

}

}

while循环特殊形式

while死循环 : while(true){}

什么时候用:for循环、while循环

for循环用于,已知的循环次数

while循环用于,结束条件(直到什么时候停止)

do-while 循环

格式: do{ 执行代码 }while(布尔表达式);

eg:

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int a = 10;while(a < 10){a++;System.out.println(a);}int b = 10;do{b++;System.out.println(b);}while(b < 10);}
}

while 和 do-while的区别

do-while 是先执行再判断 while是先判断再执行

break 和 continue关键字

break 在switch中,退出switch

break 在循环中出现,退出循环

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {for(int i = 0; i < 10; i++) {//循环次数,循环过程i的变化if (i == 5) {break;//退出循环,后续程序将不再执行。}System.out.println(i);}}
}

continue 在循环中出现,跳过本地循环,开始下一次循环(本质:continue 到 i++ 开始下一次循环)

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {for(int i = 0; i < 10; i++){//循环次数,循环过程i的变化if(i == 5){continue;//阻止后续程序的执行,但不会退出循环。}System.out.println(i);}}
}

作业2:通过break和continue优化输入年月日

public class Demo07 {//作业:输入年月日,算出是这一年的第几天public static void main(String[] args) {int year = 2023;int month = 7;int day_month = 2;// day of week 星期几 ; day of month 一个月第几号; day of year 一年第几天//一年中的第几天int day_year = 0;int Feb = 28;//判断平年或闰年if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){Feb = 29;}if(month > 1) {int m = month - 1;//月份 31 30 Feb
//            while (m > 0) {while (true){switch (m) {case 1:case 3:case 5:case 7:case 8:case 10:day_year += 31;break;//结束switchcase 2:day_year += Feb;break;//结束switchdefault:day_year += 30;break;//结束switch}m--;if(m == 0){break;//结束循环}}}//break 在循环中,就是结束循环, 在switch中就是结束switch。//最后加上这个月已经过的日期day_year += day_month;System.out.println("您输入的是:" +year+ "年" +month+ "月" +day_month + "日");System.out.println("这是该年中的第" + day_year + "天");}
}

阶乘!

比如3! = 3 x 2 x 1

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {//输入一个整数,求概述的阶乘int n = 23;//定义一个结果集int result = 1;// >= >for(int i = n; i > 0; i--){result *= i;System.out.print(i + " x ");}System.out.println();//换行System.out.println(n + "的阶乘为:" + result);}
}

打印三角形

public class Demo09 {//打印三角形 (等边三角形)//*//**//***//****public static void main(String[] args) {//循环int n = 4;for(int i = 0; i < n; i++){//注意:外循环与内循环中的初始化变量不能重名for(int j = 0;j < i + 1; j++){System.out.print("*");}//换行System.out.println();}}
}

猜数游戏完整版

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int m = (int)(Math.random() * 101);while (true){System.out.println("请输入一个0~100之间数:");int n = scan.nextInt();if(n > m){System.out.println("输入过大");}else if(n < m){System.out.println("输入过小");}else{System.out.println("猜对了");break;}}}
}

作业

问:有一只猴子在在海滩捡到一堆桃子

分成了5份,多出了一个被猴子扔掉,取了其中一份,留下其余四份

先后总共来了5只猴子,做了同样的事情。 请问这堆桃子至少有多少个

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {for(int i = 1; i < 10000; i++){int a = i;if(a % 5 == 1){a = (a - 1) / 5 * 4;if(a % 5 == 1){a = (a - 1) / 5 * 4;if(a % 5 == 1){a = (a - 1) / 5 * 4;if(a % 5 == 1){a = (a - 1) / 5 * 4;if(a % 5 == 1){System.out.println(i);break;}}}}}}}
}

作业1:分解质因数

(质数:只能被1或者自身整除的数)

因数:乘法的各参数

例如:输入 6 输出 6 = 3 x 2 输入 12 输出 12 = 3 x 2 x 2

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int number = 12;//1 ~ number : 1不是质数int a = 2;System.out.print(number + " = ");while(true){if(number % a == 0){number = number / a;System.out.print(a);if(number == 1){//已经除尽了break;//退出循环}else{System.out.print(" x ");}}else{//如果a的值除不尽,将a逐渐增加a++;}}}
}

作业2:回文数(输出1000以内的所有回文数)

回文数:数值对称 11 121 131 11211

import java.util.Scanner;public class Work02 {//回文数(1000以内的所有回文数)//回文数:数值对称 11 121 131 11211public static void main(String[] args) {for( int i=0 ; i<10 ; i++ ) {System.out.println(i + "是回文数");}for( int i=10 ; i<100 ; i++){int g=i%10;int s=i/10;if(g==s){System.out.println(i+"是回文数");}}for(int i=100 ; i<1000 ; i++){int g=i%10;int b=i/100;if (g==b){System.out.println(i+"是回文数");}}}
}

作业3:水仙花数(求1000以内的所有水仙花数)

三位数分别求三次幂的和 是自己本身

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {for(int a = 1; a <= 9; a++){for(int b = 0; b <= 9; b++){for(int c = 0; c <= 9; c++){if(a * 100 + b * 10 + c == a * a * a + b * b * b + c * c * c){System.out.println(a * 100 + b * 10 + c);}}}}}
}

作业4:ATM机程序

要求:

1)进入程序时,提示功能选项 取款 存款 查询 退出

2)模拟完成存款、取款、查询功能

3)用户只要不退出就能一直操作

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {double money = 200;boolean status = true;Scanner scan = new Scanner(System.in);System.out.println("-----Welcome----");while (status) {System.out.println("请选择:1)取款 2)存款 3)查询 4)退出");int n = scan.nextInt();switch (n) {case 1:System.out.println("请输入取款金额:");double m = scan.nextDouble();if (money - m >= 0) {money -= m;System.out.println("取款成功");} else {System.out.println("您的余额不足");}break;case 2:System.out.println("请输入存款金额:");double c = scan.nextDouble();money += c;System.out.println("存款成功");break;case 3:System.out.println("您的余额:");System.out.println(money);break;case 4:status = false;System.out.println("已退出");break;default:break;}}}
}

作业5:抛小球

以一个高度抛出小球,小球弹起高度的一半后,再次下落

当小球弹了n次,它距离地面的距离为多少

求小球总共走了多长距离

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int n = 6;double h = 100;double sum = 0;for(int i = 0; i < n; i++){sum += h;//特殊:从右往左运算.sum += h = h / 2;}System.out.println(sum);}
}

数组

简单定义:将一类数据方到一个整体中

专业定义:将数据类型相同的数据,放到一个集合中

数组的定义方式

  1. 静态初始化 2、动态初始化

静态初始化

定义:在构建数组时就给予初始化的值

数组类型: 数据类型[]、变量[]

数组初始化 {数组元素,数组元素,....}

动态初始化

先构建数组的对象,然后在逐一赋值初始化

基本格式: 数据类型[] 变量名 = new 数据类型[数组的长度]

注意:数组的类型决定了元素是什么样的类型

数组元素

取出指定的数组元素:数组元素都具有下标值,下标值从0开始

通过”数组变量[下标值]“将数组元素取出

取不到”下标不存在“的值,报运行错误

遍历数组

  1. 可以通过length这个属性(变量)获取数组的长度

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {//获取数组内所有元素int[] a={1,2,3};for(int i = 0; i < a.length; i++ ){//0~2System.out.println(a[i]);}//取出数组中的最后一个元素System.out.println(a[a.length - 1]);//2、将数组内容全部输出到打印语句 [I@5594a1b5地址
//        System.out.println(a);// 工具类 Arrays (java.util.Arrays)System.out.println(Arrays.toString(a));}
}

数组空间

public class Demo03 {public static void main(String[] args) {//数组空间int[] a = {1,2,3};//1)数组a的地址,指向了1,2,3元素所在的堆内存空间//2)而数组a的地址等于 1元素所在空间的地址。//3)1,2,3元素所在的堆内存空间的地址是连续的//对指定下标的数组元素赋值,可以直接修改该数组a[1] = 4;//动态初始化过程//new: 对象创建//虽然new int[3] 开辟了三个空间,但是空间中是有指定类型的默认值int[] b = new int[3];System.out.println(b[0]);//输出默认值0b[0] = 1;System.out.println(b[0]);//其他类型数组的默认值float[] n1 = new float[3];//默认值0.0char[] n2 = new char[3];System.out.println(n2[0]);//空字符boolean[] n3 = new boolean[3];System.out.println(n3[0]);//false//引用数据类型的默认值String[] n4 = new String[3];System.out.println(n4[0]);//null 空对象}}

问题

控制输入对应的n值,创建一个n长度的随机数数组

数组元素不能重复

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[] rands = new int[20];for(int i = 1; i <= 20; i++){rands[i - 1] = i;}int[] arr = new int[10];for(int i = 0; i < arr.length; i++){//随机下标int n = (int)(Math.random() * rands.length);if(rands[n] != 0){arr[i] = rands[n];rands[n] = 0;}else{i--;}}System.out.println(Arrays.toString(arr));}
}

数组复制

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[] a = {1,2,3,4,5,6};//问:如实现数组复制 从哪里开始复制(start),到哪里停止复制(end)//   数组 ===> 新的数组 (数组长度要确认) length = end - start + 1int start = 2;int end = 3;int[] b = new int[end-start+1];int m = 0;//b数组的下标for(int i = 0; i < a.length; i++){if(i >= start && i <= end){b[m] = a[i];m++;}}System.out.println(Arrays.toString(b));}
}

数组复制 System.arraycopy

System.arraycopy(src,srcPos,dest,destPos,length)

src : 被复制的数组(从哪个数组复制)

srcPos : 从src的哪个下标开始复制

dest : 粘贴到的数组

destPos : 从dest的哪个下标开始粘贴

length : 复制的数据元素的长度

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[] a = {1,2,3,4,5,6};int[] c = {7,8,9,10,11,12};System.arraycopy(a,2,c,2,2);System.out.println("c数组:" + Arrays.toString(c));System.out.println("a数组:" + Arrays.toString(a));}
}

数组扩容

注意:数组本身在定义之后,不可以增减长度

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[] a = {1,2,3};//在a数组中添加一个为4的元素//System.arraycopyint[] b = new int[a.length + 1];System.arraycopy(a,0,b,0,a.length);b[3] = 4;System.out.println(Arrays.toString(b));a = b; //引用地址的赋值。
//        double[] c = new double[3];
//        c = a;//数组能够赋值,是因为有相同的数组类型,类型不同就不能相互赋值。System.out.println(Arrays.toString(a));//数组阔容的办法//Arrays.copyOf(src,length)// src:需要扩容的数组// length:扩容的长度int[] c = {1,2,3};
//        c = Arrays.copyOf(c,4);
//        c = Arrays.copyOf(c,2);
//        System.out.println(Arrays.toString(c));//比较地址是不是同一个System.out.println(c == Arrays.copyOf(c,2));}
}

练习

  1. 生成一个20长度的随机数数组

  1. 分成一个奇数数组 偶数数组

方法1:

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[] a = new int[20];for(int i = 0; i < a.length; i++){a[i] = (int)(Math.random()*100);}int[] even = {}; //偶数数组 空数组int[] odd = {}; //奇数数组//方式一:使用扩容方式实现奇偶数组分离for(int i = 0; i < a.length; i++){if(a[i] % 2 == 0){//偶数even = Arrays.copyOf(even,even.length + 1);even[even.length - 1] = a[i];}else{//奇数odd = Arrays.copyOf(odd,odd.length + 1);odd[odd.length - 1] = a[i];}}System.out.println("偶数数组:" + Arrays.toString(even));System.out.println("奇数数组:" + Arrays.toString(odd));}
}

方法2:特殊的排序方式

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[] a = new int[20];for(int i = 0; i < a.length; i++){a[i] = (int)(Math.random()*100);}for(int j = 0; j < a.length - 1; j++){for(int i = 0; i < a.length - 1; i++){if(a[i] % 2 == 0 && a[i+1] % 2 == 1){int tmp;tmp = a[i];a[i] = a[i+1];a[i+1] = tmp;}}}System.out.println(Arrays.toString(a));}
}

冒泡排序

原理图

import java.util.Arrays;public class Demo08 {//冒泡排序 (原理图)public static void main(String[] args) {int[] a = {5,4,3,2,1};//通过推理,总共有a.length - 1 次排序for(int j = 0; j < a.length - 1; j++){//一次排序//1.考虑倒数的第二位元素结束: i < a.length - 1//a.length - 1 - j : 考虑到不用比较的次数for (int i = 0; i < a.length - 1 - j; i++){//2.前面的数和后面的数比较大小if(a[i] > a[i+1]){//3.交换int tmp;tmp = a[i];a[i] = a[i+1];a[i+1] = tmp;}}System.out.println(Arrays.toString(a));}System.out.println(Arrays.toString(a));}
}

排序函数

import java.util.Arrays;public class Demo09 {//排序函数public static void main(String[] args) {int[] a = {5,4,3,2,1};Arrays.sort(a);//从小到大的排序System.out.println(Arrays.toString(a));}
}

问题

["红","蓝","绿","蓝","红","绿"]

按照:' 绿 < 蓝 < 红 '的规则排序

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {String[] b = {"红","蓝","绿","蓝","红","绿"};for(int j = 0; j < b.length - 1; j++){for(int i = 0; i < b.length - 1; i++){if(b[i] == "蓝" && b[i+1] == "绿" || b[i] == "红" && b[i+1] == "蓝"|| b[i] == "红" && b[i+1] == "绿" ){String tmp;tmp = b[i];b[i] = b[i+1];b[i+1] = tmp;}}}System.out.println(Arrays.toString(b));}
}

二维数组

一维数组:

int[] a = {1,2,3};
int[] b = {3,4,5};
int[] c = {6,7,8};

二维数组 : 二维数组的元素是一维数组

定义方式 int[][] 数组名称

如 : int[][] d = {a,b,c};

二维数组的定义方式:

  1. 静态初始化

int[][] n1 = {{1,2,3},{3,4,5}};
  1. 动态初始化

理解方式一: new int[行][列]

理解方式二: new int[有几个一维数组][这些一维数组中有几个元素]

        int[][] n2 = new int[3][3];int[][] n3 = new int[3][];// = {[],[],[]};//元素是三个空的一维数组

静态初始化的特殊形式:每个元素中数组是不同的长度

int[][] n4 = {{1,2,3},{5},{6,7}};

length 数组长度

System.out.println(n4.length);//有多少个一维数组

System.out.println(n4[n4.length - 1].length);//指定一维数组中的元素个数

二维数组的遍历

import java.util.Arrays;
import java.util.Scanner;public class Demo1 {public static void main(String[] args) {int[][] n4 = {{1,2,3},{5},{6,7}};for(int i = 0; i < n4.length; i++){for(int j = 0; j < n4[i].length; j++){System.out.print(n4[i][j]);}}}
}

控制台输入

java.util.Scanner

1、引入Scanner工具 :import java.util.Scanner;

2、新建Scanner的对象: Scanner scan = new Scanner(System.in);

3、先使用System.out.println("请输入内容:");

4、使用scan.nextXXX 定义输入值的类型。

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入内容:");int n = scan.nextInt();//整数
//        double n = scan.nextDouble();//浮点数
//        String n = scan.nextLine();//字符串System.out.println("刚才输入了:" + n);}
}

随机数

Math.random() 创建一个随机0~1的数(且不包含1) double类型

import java.util.Scanner;public class Demo1 {public static void main(String[] args) {//生成一个0~1的数(且不包含1)System.out.println(Math.random());//0~10 的一个随机整数System.out.println((int)(Math.random() * 11));}
}

作业1:石头剪刀布游戏

import java.util.Scanner;public class Demo14 {public static void main(String[] args) {//作业:石头剪刀布游戏//要求:1、采用随机数,生成一个“石头、剪刀、布”的值(String)//     2、要求用户输入“石头、剪刀、布”,任意值//     3、判断用户赢,还是电脑赢。//要求1:三个随机数int n = (int)(Math.random() * 3);//n == 0 "石头"//n == 1 "剪刀"//n == 2 "布"String robot = "石头";if(n == 1){robot = "剪刀";}else if(n == 2){robot = "布";}//要求2:用户输入
//        Scanner scan = new Scanner(System.in);
//        System.out.println("请输入你猜测的手势:");String user = "石头";//要求3:判断输赢 (枚举)if(robot == "石头" && user == "布"){System.out.println("用户赢");}else if(robot == "石头" && user == "剪刀"){System.out.println("电脑赢");}else if(robot == "石头" && user == "石头"){System.out.println("平局");}if(robot == "剪刀" && user == "布"){System.out.println("电脑赢");}else if(robot == "剪刀" && user == "剪刀"){System.out.println("平局");}else if(robot == "剪刀" && user == "石头"){System.out.println("用户赢");}if(robot == "布" && user == "布"){System.out.println("平局");}else if(robot == "布" && user == "剪刀"){System.out.println("用户赢");}else if(robot == "布" && user == "石头"){System.out.println("电脑赢");}}
}

作业2:输入年月日,算出是这一年的第几天

要求用户分别输入 年月日:(闰年)

算出这是这一年的第几天

public class Work01 {

//作业:输入年月日,算出是这一年的第几天

public static void main(String[] args) {

int year = 2023;

int month = 7;

int day_month = 2;// day of week 星期几 ; day of month 一个月第几号; day of year 一年第几天

//一年中的第几天

int day_year = 0;

int Feb = 28;

//判断平年或闰年

if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){

Feb = 29;

}

//if语句的特殊写法

//注意:if语句可以不加{} 但是只能约束它后面的第一条语句

// if(Feb > 100)

// System.out.println("1");

// System.out.println("2");

// if else if

if(1 < month) day_year += 31;

if(2 < month) day_year += Feb;

if(3 < month) day_year += 31;

if(4 < month) day_year += 30;

if(5 < month) day_year += 31;

if(6 < month) day_year += 30;

if(7 < month) day_year += 31;

if(8 < month) day_year += 31;

if(9 < month) day_year += 30;

if(10 < month) day_year += 31;

if(11 < month) day_year += 30;

//最后加上这个已经过的日期

day_year += day_month;

System.out.println("您输入的是:" +year+ "年" +month+ "月" +day_month + "日");

System.out.println("这是该年中的第" + day_year + "天");

}

}

作业2:通过Switch语句优化

public class Demo02 {//作业:输入年月日,算出是这一年的第几天public static void main(String[] args) {int year = 2023;int month = 7;int day_month = 2;// day of week 星期几 ; day of month 一个月第几号; day of year 一年第几天//一年中的第几天int day_year = 0;int Feb = 28;//判断平年或闰年if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){Feb = 29;}//if语句的特殊写法//注意:if语句可以不加{} 但是只能约束它后面的第一条语句
//        if(Feb > 100)
//            System.out.println("1");
//            System.out.println("2");switch(month - 1){case 11:day_year += 30;case 10:day_year += 31;case 9:day_year += 30;case 8:day_year += 31;case 7:day_year += 31;case 6:day_year += 30;case 5:day_year += 31;case 4:day_year += 30;case 3:day_year += 31;case 2:day_year += Feb;case 1:day_year += 31;}//最后加上这个月已经过的日期day_year += day_month;System.out.println("您输入的是:" +year+ "年" +month+ "月" +day_month + "日");System.out.println("这是该年中的第" + day_year + "天");}}

作业:计算BMI指数

输入用户体重、身高 算出对应的BMI指数

输出该用户的身体状况

import java.util.Scanner;

public class Work02 {

//计算BMI指数

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("请输入身高(米):");

double height = scan.nextDouble();

System.out.println("请输入体重(千克):");

double weight = scan.nextDouble();

double bmi = weight / (height * height);

System.out.println(bmi);

if(bmi < 18.5){

System.out.println("偏瘦");

}else if(bmi < 24){

System.out.println("正常");

}else{

System.out.println("偏胖");

}

}

}

作业:猜数游戏

指定范围内让用户输入一个数字

生成随机数,判断该用户输入过大,过小,成功猜对

import java.util.Scanner;

public class Work03 {

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

System.out.println("请输入一个0~10之间数:");

int n = scan.nextInt();

int m = (int)(Math.random() * 11);

if(n > m){

System.out.println("输入过大");

}else if(n < m){

System.out.println("输入国小");

}else{

System.out.println("猜对了");

}

}

}

作业:商店找零

要求输入单价、数量、用户支付的金额,然后输出找零的数值(考虑现实情况)

import javax.swing.*;public class Work04 {public static void main(String[] args) {int number = 12;double price = 2.39;double pay = 100;//分:四舍五入//思路:结余的钱 - 0.05 ?double n = pay - number * price;//将小数变为整数double m = n * 10;//小数点右移一位if(m - (int)m >= 0.5){//四舍五入的条件m += 1;}m = (int)m;//舍去小数部分n = m / 10;//小数点左移一位//Math.round() 四舍五入System.out.println("商品总价:" + number * price);System.out.println("用户支付:" + pay);System.out.println("找零:" + n);}
}

阶段总结

  1. 在JAVA中,如何跳出当前多重嵌套循环?

方法1:通过break标签跳出多重循环

方法2:循环条件限制(外层循环受到内层循环控制,通过控制内外层循环条件跳出循环)

方法3:内层循环抛出异常(通过内层循环抛出的异常跳出循环)

2、JDK和JRE有什么区别?

JDK全称为Java Development Kit ,是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包。

JRE全称为 Java Runtime Environment ,是java运行时的环境,包含了java虚拟机,java基础类库,是使用java语言编写的程序运行所需要的软件环境。

JDK是提供给程序员使用的,JRE是提供给想运行java程序的用户使用的。包含关系:JDK包含了JRE

3、=、==、和equls的区别

=赋值运算符

比如:a =b就是把b的值赋予给了a

==操作符

操作符专门用来比较变量的值是否相同。

  • 基本数据类型:比较的是他们的值是否相同

  • 引用数据类型:比较的是他们的内存地址是否是同一个地址

引用类型对象变量其实是一个引用,他们的值是指向对象所在的内存地址,而不是对象本身。

equls方法

equls方法常用来比较对象的内容是否相同

java中所有的类都是继承于Object这个超类的,在Object类中定义的equls方法:

  • 未重写equls方法的类:Object中的equls方法实际使用的也是==操作符,比较的是他们的内存地址是否同一地址

  • 重写了equls方法的类:实现该类自己的equls方法比较逻辑(一般是比较对象的内容是否相同)。

比如:String:比较字符串内容。Integer:比较对应的基本数据类型int的值是否相同

4、string是基础数据类型吗?基础的数据类型有哪些?

String不是基础的数据类型。

基础数据类型一共有8种,分别是整数型(byte ,int , short , long) ,浮点型(float , double), 字符型(char),布尔型(boolean)。

基础类型

  • 整型

byte 8字节

short 16字节

int 32字节

long 64字节

  • 浮点型

float 32字节

double 64字节

  • 字符型

char

  • 布尔型

boolean

5、如何实现数组和List之间的转换?

  • 数组转List使用Arrays.asList()方法

  • List转数组使用list.toArray()方法

华清远见重庆中心—后端基础阶段技术总结/个人总结相关推荐

  1. 华清远见重庆中心--后端基础阶段技术总结/个人总结

    目录 目录 目录 Java基础知识 java概述 JDK安装 JDK卸载 JDK版本切换 认识JetBrains 安装IDEA IDEA环境的认识 新建一个Java的项目 新建一个文件 第一个Java ...

  2. 华清远见-重庆中心-JAVA基础阶段技术总结

    系列文章目录 第一章 华清远见--重庆中心-JAVA基础阶段技术总结 第二章 文章目录 系列文章目录 文章目录 前言 一.关于java 1.发展历程 2.编程开发 3.java架构 4.java的特点 ...

  3. 华清远见-重庆中心-JAVA基础阶段技术总结/知识点梳理/个人总结/关于JAVA技术的解析(看法)/面试题解析

    Java基础知识 概述 什么是java:1.是边编译边解释的面向对象的编程语言. 2.java语言是1995年发布的,发布语言公司是:Sun 3.下载安装Java时从Oracle官网下载,最好下载LT ...

  4. 华清远见重庆中心—JAVA基础阶段技术总结/个人总结

    文章目录 Java基础知识 概述 Java程序运行过程 Java的分类 Java为什么流行 Java能够跨平台运行的原理 JDK和JRE 第一个Java程序 Java程序的运行流程 集成开发环境IDE ...

  5. 华清远见-重庆中心-JAVA面向对象阶段技术总结

    华清远见-重庆中心-JAVA面向对象阶段技术总结 面向对象和面向过程的编程思想 面向对象(OOP) 通过创建(new)对象,赋予对象对应的行为和特征,让这些对象相互配合来解决问题 面向过程(POP) ...

  6. 华清远见重庆中心——Java面向对象阶段技术总结/个人总结

    个人总结 在这一周学习中比较让我困惑的是: 我跟着老师学习的时候能很好的理解,但是自己独立完成作业的时候就会磕磕碰碰的,思路不够清晰,并且不乏存在因为粗心犯的错误而导致进度卡壳的时刻(例如循环嵌套时位 ...

  7. 华清远见重庆中心—JAVA面向对象阶段技术总结/个人总结

    课后练习回顾,疑难重点总结(二) 目录 课后练习回顾,疑难重点总结(二) 面向对象习题脉络梳理 1.模拟双色球中奖(Java基础补充) 2.模拟"电子宠物"(构造方法的应用) 小结 ...

  8. 华清远见-重庆中心-JAVA高级阶段技术总结/知识点梳理/面试题解析

    String字符串 String是一个类,属于数据类型中的引用类型. Java中一切使用""引起来的内容,都是这个类的实例,称为字符串对象. 字符串在定义后,值不可改变,是一个常量 ...

  9. 华清远见-重庆中心-JAVA面向对象阶段技术总结/知识点梳理/个人总结

    文章目录 面向对象 方法 概念 如何调用方法 通过类名调用 Math类 通过对象调用 在同一个类中,方法A调用方法B 自定义方法 方法的分类 总结 两种编程思想 面向过程编程 面向对象编程 不同思想处 ...

最新文章

  1. UILayer的一些属性
  2. JButton 圆角_ProE、Creo在玩具轿车设计中的一个案例应用解析|轿车|玩具|圆角
  3. react native与webview通信跳转页面报错:Cannot read property 'setNativeProps' of undefiend
  4. Qt + VS 【如何添加图片资源】
  5. 一起手写Vue3核心模块源码,掌握阅读源码的正确方法
  6. Android串口通信apk源码
  7. java运行字符串代码
  8. FI常用T-CODE
  9. 爬虫python可以干嘛_【Python爬虫】什么是爬虫,爬虫能做什么?
  10. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_17-异常处理-可预知异常处理-异常处理测试...
  11. nlogn 求最长上升子序列 LIS
  12. 云原生小课堂 | Envoy请求流程源码解析(一):流量劫持
  13. win10录屏_win10自带的录屏软件好用!!!
  14. 宝塔同时安装苹果cms海洋cms_苹果cms用宝塔定时采集+添加百度推送教程
  15. 读写锁 -- ReentrantReadWriteLock
  16. C语言及程序设计初步例程-4 C语言程序初体验
  17. 佛法摄持下的技术人生
  18. 如何实现点击div区域外隐藏div区域
  19. nodejs安装时遇到的问题
  20. 零拷贝技术浅浅析【kafka实现百万级吞吐量基础】

热门文章

  1. 简易聊天室(Python版)
  2. excel导出多重表头utils_java excel复杂表头和复杂数据导出
  3. Windows10 配置 Swin-Transformer 踩坑记
  4. 浅析CSS中的overflow属性
  5. LightDB13.3-22.1数据库安装
  6. face++API接口实现颜值测试
  7. 组装电脑购机指南和记录自己的装机过程
  8. 整蛊代码——start cmd
  9. 酒店管理系统的设计与实现(任务书+中期检查+PPT+论文)
  10. 拱墅区取业计算机学校,【技行天下】杭州市拱墅职业高级中学校长应康强专访...