java学习打卡

  • 有java基础,JavaSE学习暂时略过【多线程、网络编程、注解和反射】
  • 有mysql基础
  • 11.9开始javaweb两周学习打卡
  • 11.22~11.29进行SSM学习
  • 暂时安排如上
  • 每日Leecode打卡
  • 了解一些技术【maven、docker、git、linux】

2021.11.9打卡

Leecode学习

1 用两个栈实现队列

java中使用Stack会造成速度较慢,Stack继承了vector接口,而Vector底层是一个Object[]数组,需要考虑空间扩容和移位问题,可以使用LinkedList来做容器,其本身就是双向链表扩容消耗少。

2 包含min函数的栈

JavaWeb从入门到实战

1 基本概念

在java中,动态web资源开发的技术统称为javaWeb。
静态web,动态web【技术栈:Servlet、ASP、php】

2 web应用程序

可以提供浏览器访问的程序:

  • a.html、b.html。。。多个web资源,这些资源可以被外界访问,对外界提供服务;
  • 一个web应用有多部分组成:【html,css,js,jsp,servlet,java程序,jar包,配置文件】
    1、静态web
  • .htm,.html这些都是网页的胡追,服务器上存在这些东西,可以直接进行读取。
    在这里插入图片描述
  • 存在的缺点:
    (1)无法动态更新,所有用户看到都是同一页面
    (2)无法和数据库交互(数据无法持久化,用户无法交互)
    2、动态web
    在这里插入图片描述
  • 存在的缺点
    1、加入服务器的动态web资源出现错误,需要重新编写我们的后台程序,重新发布【停机维护】;
    2、他可以与数据库交互JDBC(数据持久化)

3 web服务器

1、技术讲解
ASP,基本一个页面都有几千行代码,页面几千极其混乱,维护成本较高
PHP,开发速度很快,功能很强大,跨平台,代码很简单,但是无法承载访问量大的情况
JSP/Servlet,B/S,C/S
2、服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
Apache Tomcat

4 Tomcat

  • 安装Tomcat
  • Tomcat启动和配置
  • 配置
   可以配置启动的端口号
   		Tomcat的默认端口号为:8080;
   		mysql:3306
   		http:80
   		https:443
   可以配置主机的名称
   		默认的主机名为:localhost->127.0.0.1
   		默认网站应用存放的位置为:webapps
  • 可以配置一个环境变量(可选择)
  • 发布一个web网站
	不会就先模仿
   将自己写的网站,放到服务器Tomcat中指定的web应用的文化夹子webapps下,就可以访问了。

网站应有的结构:
在这里插入图片描述

在这里插入图片描述

2021.11.10打卡

Leetcode学习

1 从尾到头打印链表

以数组的形式返回结果,则直接倒序存放即可

2 反转链表

在本身的基础上逆置,思路:头指针指向的结点要作为链表的尾部,只需要将头结点和下一个结点断开即可,定义一个新的指针作为尾指针,引入新指针进行遍历即可。

3 复杂链表的复制

  • 哈希表
  • 链表的拼接和拆分
    此处复制next结点很容易,难点在于将random结点也对应复制在新的链表上;拼接拆分法:先将新链表的next放置妥当,如果插入到原来的链表上,那么random即可利用原有的random指针直接对应。

javaweb路线

5 Http

5-1 什么是HTTP?

HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP上。

  • 文本:html,字符串…
  • 超文本:图片,音乐,视频,定位,地图…
  • 80
    https:安全的
  • 443
5-2 两个时代
  • http1.0
    HTTP/1.0:客户端可以与web服务器端连接,只能获得一个web资源,断开连接
  • http2.0
    HTTP/1.1:客户端可以与web服务器端连接,可以获得多个web资源。
5-3 Http请求
  • 客户端—发请求(Request)—服务器
    百度
	Request URL: https://www.baidu.com/  请求地址
	Request Method: GET    get方法/post方法
	Status Code: 200 OK    状态码:200
	Remote Address: 14.215.177.39:443   远程地址
	Referrer Policy: strict-origin-when-cross-origin
Accept: text/html   告诉浏览器它所支持的数据类型
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive

1、请求行

  • 请求行中的请求方式:GET
  • 请求方式:GET,POST,HEAD,DELETE,PUT,TRACT…
    2、消息头
5-4 Http响应
  • 服务端—响应—客户端
	Cache-Control: private   缓存控制
	Connection: keep-alive   连接:保持活跃
	Content-Encoding: gzip
	Content-Type: text/html;charset=utf-8
	refrush:告诉客户端多久刷新一次
	location:让网页重新定位
  • 响应状态码
    200:请求响应成功
    3**:请求重定向:你重新到我给你的新位置去
    4xx:找不到资源【资源不存在】
    5xx:服务器代码错误【502:网关错误】

6 Maven

为什么学习这个技术?
1、javaweb开发中,需要使用大量的jar包,我们手动趣导入
2、Maven自动帮我们导入和配置jar包

6-1 Maven项目架构管理工具

核心思想:约定大于配置【有约束,不要去违反】
Maven会规定好你该如何去编写我们的java代码,必须按照规范进行。

  • 下载安装Maven
  • 配置环境变量
    M2_HOME maven目录下的bin目录
    MAVEN_HOME maven的目录
    在系统的path中配置:%MAVEN_HOME%\bin
  • 阿里云镜像
    conf/setting.xml
    设置mirrors
  • 本地仓库
    创建本地仓库:localRepository
  • 在IDEA中使用Maven
    启动IDEA
    1、创建一个MavenWeb项目
    MavenGAV
    Maven仓库多了什么东西?
    注意:IDEA中的Maven配置
    2、创建一个普通的Maven项目
  • 在IDEA中配置Tomcat

2021.11.11打卡

Leetcode学习

1 替换空格

java中学习StringBuilder类和String类
String创建的字符串存储在公共池中,而new创建的字符串对象在堆上。

参考“https://www.runoob.com/java/java-string.html”

在这里插入图片描述
== 注意==String类是不可改变的,所以一旦创建了String对象,那他的值就无法改变了。如果需要对字符串做很多修改,那么应该使用StringBuffer&StringBuilder,此时其对象能够被多次修改,并且不产生新的未使用对象。

  • 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。
  • StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于StringBuilder 的方法不是线程安全的(不能同步访问)。
  • 由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用StringBuilder 类。
    在这里插入图片描述
    最终的返回String toString()。

2 左旋转字符串

精选题解介绍:

  • 字符串切片法
	return s.substring(n, s.length()) + s.substring(0, n);
  • 列表遍历拼接
  • 字符串遍历拼接
    注意:以上两种方法均可以利用求余运算检查代码
	res.append(s[ i % len(s) ])

2021.11.12打卡

Leetcode学习

1 数组中重复的数字

本题ac很容易,学习以复杂度角度思考问题
1、时间复杂度O(n),空间复杂度O(n)
利用数据结构特点,直接想到利用哈希表可以实现
2、时间复杂度O(n),空间复杂度O(1)
原地置换:swap( nums[i],nums[nums[i]] )
sort排序:多种排序方式

集合框架体系
  • 接口
    • Collection【List】
    • Map
  • 具体类
    • List【ArrayList,LinkedList】
    • Map【HashMap】

LinkedList: 该类实现了List接口,允许有null(空)元素。主要用于创建链表数据结构,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,解决方法就是在创建List时候构造一个同步的List。
ArrayList: 该类也是实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。
HashSet: 该类实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。
HashMap: HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
Java.util中定义的类
Vector:该类和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度,默认扩容方式为原来的2倍。
Stack:栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
Dictionary:Dictionary 类是一个抽象类,用来存储键/值对,作用和Map类相似。

在排序数组中查找熟悉1

高效执行代码,考虑面试官考察内容,有序数组中采用折半查找排序,时间复杂度为O(nlogn)。

0~n-1中缺失的数字

2021.11.13打卡

Leetcode学习

1 二维数组中的查找

每行从左到右递增,每列从上到下递增,可以将该矩阵顺时针旋转45°,此时的矩阵能被看作类似于二叉搜索树
若flag>root,则进入左子树;
若flag<root,则进入右子树;
此时的查找会比暴力算法更加高效。

2 旋转数组的最小数字

看见按序的数组,思考二分查找法。

3 第一个只出现一次的字符

利用hashmap实现,HashSet<Charater,Boolean>将是否重复出现填写在映射中;
时间复杂度O(n);空间复杂度O(1)。

2021.11.14打卡

Leetcode学习

1从上到下打印二叉树

1、特例处理:当树的根结点为空时,直接返回空列表;
2、初始化:打印结果列表res=[],包含根结点的队列queue=[root];
3、BFS循环:当队列为空时跳出;
出队时利用ArrayList接收val,比数组更加方便增添删除操作。
在这里插入图片描述

2 从上到下打印二叉树②

在这里插入图片描述

3 从上到下打印二叉树③

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
本题中BFS遍历即可,但是要向反向输出到列表内,需要将中间采用的列表使用LinkedList双端链表来连接。
在这里插入图片描述

2021.11.15打卡

Leetcode学习

1 树的子结构【for me难度高】

判断子结构需要两步:
1、调用函数isSubStructure(A,B)遍历树A,先访问到B树的根结点;
2、调用函数recur(A,B),判定树A包含树B。
recur(A, B) 函数:

  • 终止条件:
    当节点 B 为空:说明树 B 已匹配完成(越过叶子节点),因此返回 true ;
    当节点 A 为空:说明已经越过树 A 叶子节点,即匹配失败,返回 false ;
    当节点 A 和 B 的值不同:说明匹配失败,返回 false ;
  • 返回值:
    判断 A 和 B 的左子节点是否相等,即 recur(A.left, B.left) ;
    判断 A 和 B 的右子节点是否相等,即 recur(A.right, B.right) ;
    isSubStructure(A, B) 函数:
  • 特例处理: 当 树 A 为空 或 树 B 为空 时,直接返回 false ;
  • 返回值: 若树 B 是树 A 的子结构,则必满足以下三种情况之一,因此用或 || 连接;
    以 节点 A 为根节点的子树 包含树 B ,对应 recur(A, B);
    树 B 是 树 A 左子树 的子结构,对应 isSubStructure(A.left, B);
    树 B 是 树 A 右子树 的子结构,对应 isSubStructure(A.right, B);
作者:jyd
链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/solution/mian-shi-ti-26-shu-de-zi-jie-gou-xian-xu-bian-li-p/
来源:力扣(LeetCode)
public class main {
 
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值