NoTrouble's Blog

我们一路奋战,不是为了改变世界,而是为了不让世界改变我们


  • 首页

  • 标签

  • 分类

  • 歌单

  • 搜索

位运算和数学

发表于 2021-07-19 | 分类于 LeetCode

位运算的基本知识

进制

进制的概念

任何一种进位制都有一个基数,基数为X的进位计数称为X进制,表示每一个数位上的数运算都是逢X进一。

对于一个X进制的数,其具体数值由其中的每个数码和数码所在的数位决定。整数部分从右往左的第m个数位表示的权重是$X^m$,其中m最小值为0;小数部分从左往右的第n个数位表示的权重是$X^{-n}$,其中n最小为1。

十进制的123.45可以写成如下形式:$123.45=1\times10^2+2\times10^1+3\times10^0+4\times10^{-1}+5\times10^{-2}$

八进制的720.5可以写成如下形式:$720.5_{(8)}=7\times8^2+2\times8^1+0\times8^0+5\times8^{-1}$

阅读全文 »

SpringBoot的基本使用

发表于 2021-07-10 | 分类于 SpringBoot

为什么要学习SpringBoot

  • 在SSM中需要写很多的配置才能进行正常的使用
  • 实现一个功能需要引入很多依赖,尤其是要自己去维护依赖的版本,容易出现依赖冲突等问题

SpringBoot就能很好的解决上述问题

阅读全文 »

动态规划DP

发表于 2021-07-10 | 分类于 LeetCode

62.不同路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public int uniquePaths(int m, int n) {
//创建一个dp二维数组
int[][] dp = new int[m][n];

//dp[0][0] = 1,起点所在只有一种路径可达
dp[0][0] = 1;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
//若路径不是在上边界和左边界上,则路径为上方加左方
//若路径在左边界上,则路径为上方
//若路径在上边界上,则路径为左方
if(i > 0 && j > 0){
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}else if(i > 0){
dp[i][j] = dp[i-1][j];
}else if(j > 0){
dp[i][j] = dp[i][j-1];
}
}
}

return dp[m-1][n-1];
}
}
阅读全文 »

二叉树

发表于 2021-07-09 | 分类于 LeetCode

二叉树的前序遍历

递归实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root == null){
return res;
}
preOrder(root, res);

return res;
}

private void preOrder(TreeNode root, List<Integer> res){
if(root == null){
return;
}
res.add(root.val);
preOrder(root.left, res);
preOrder(root.right, res);
}
}
阅读全文 »

垃圾回收算法

发表于 2021-07-05 | 分类于 JVM

垃圾标记阶段:对象存活判断

  • 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,需要区分出内存中哪些是存活对象,哪些是已经死亡的对象,只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。
  • 简单地说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。
  • 判断对象存活一般有两种方式:引用计数器算法和可达性分析算法。

阅读全文 »

内存分配与回收策略

发表于 2021-06-26 | 分类于 JVM

​ Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存。

​ 对象的内存分配,从概念上讲,应该都是在堆上分配(实际上也有可能经过即时编译后被拆散为标量类型并间接地在栈上分配)。在经典分代的设计下,新生对象通常会分配在新生代中,少数情况下也可能会直接分配在老年代。对象分配的规则并不是固定的,《Java虚拟机规范》并未规定新对象的创建和存储细节,这取决于虚拟机当前使用的是哪一种垃圾收集器,以及虚拟机中与内存相关的参数的设定。

阅读全文 »

Java堆(Heap)

发表于 2021-06-25 | 分类于 JVM

概述

​ Java堆(Java Heap)是虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,“几乎”所有的对象实例都在这里分配内存。在《Java虚拟机规范》中对Java堆的描述是:“所有的对象实例以及数组都应当在堆上分配”,而这里“几乎”是指从实现角度来看,随着Java语言的发展,由于即时编译技术的进步,尤其是逃逸分析技术的日渐强大,栈上分配、标量替换优化手段已经导致一些微妙的变化悄然发生,所以说Java对象实例都分配在堆上也渐渐变得不是那么绝对了。

阅读全文 »

本地方法库(Native Method Library)和本地方法接口(Native Method Interface)

发表于 2021-06-24 | 分类于 JVM

什么是本地方法

​ 一个Native Method就是一个Java调用非Java代码的接口,一个Native Method是这样一个Java方法;该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C”告知C++编译器去调用一个C的函数。

​ 在定义一个native method时,并不提供实现体,因为其实现体是由非Java语言在外面实现的。

​ 本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。

阅读全文 »

Web和HTTP

发表于 2021-06-21 | 分类于 Computer Networking

HTTP概况

​ Web的应用协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心,在[RFC 1945]和[RFC 2616]中进行定义。HTTP由两个程序实现:一个客户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方式。

阅读全文 »

应用层协议原理

发表于 2021-06-20 | 分类于 Computer Networking

​ 假定你对新型网络应用有了一些想法。也许这种应用将为人类提供一种伟大的服务。我们现在考察一下如何将你的想法转变为一种真实世界的网络应用。

​ 研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。例如,在Web应用程序中,有两个互相通信的不同的程序:一个是运行在用户主机上的浏览器程序;另一个是运行在Web服务器主机上的Web服务器程序。另一个例子是P2P在这种情况下,在参与文件共享的社区中的每台主机都有一个程序。在这种情况下,在各台主机中的这些程序可能都是类似的或相同的。

​ 因此,当研发新应用程序时,你需要编写将多台端系统上运行的软件。还软件能够用如C、Java或Python来编写。重要的是,你不需要写在网络核心设备如路由器或链路层交换机上运行的软件。即时你要为网络核心设备写应用程序软件,你也不能做到这一点。如我们所知,网络核心设备并不在应用层上起作用,而仅在较低层起作用,特别是在网络层及下面层次起作用。

阅读全文 »
<1…567…13>

130 日志
31 分类
51 标签
GitHub E-Mail
© 2024 NoTrouble