Java入门四步走

Java小白从入门到精通,Java零基础入门看这一篇就够了 作为刚刚接触java的小白,今天这篇文章的目的是帮助大家快速入门java,少走弯路 如何快速入门Java? 一、作为刚接触Java的新手,先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Java程序的开发。 还有记住学习Java语言最重要的是两点: 学习步骤/方法 学习资源 找到适合自己的学习方式,找到适合自己现阶段的学习资料,学习的过程中最好记笔记,. 阅读详情

1. 简单的入门语法:

1.1 数据类型:

基本数据类型:
整数类型 —— byte、short、int、long,
浮点类型 —— float、double
字符类型 —— char
布尔类型 —— boolean

引用数据类型:
接口(interface)、数组([ ])、类(class)。


1.2 循环怎么写:

1) 顺序控制

2) 分支控制:
        1) 单分支 if; 2) 双分支 if-else; 3) 多分支 if-elseif-....-else;4)switch 分支结构

3) 循环控制:for循环;while循环;do..while循环

1.3 数组怎么定义:

先声明数组:语法: 数据类型 数组名[]; 也可以 数据类型[] 数组名;        int a [ ]; 或者 int[ ] a;

创建数组:    语法: 数组名=new 数据类型[大小];        a = new  int[10];

1.4 函数是怎么写的

修饰符 返回值类型 函数名称(参数类型 参数1,参数类型参数2, . . . ){
                函数执行代码;
                return 返回值; 
        }

public static int addFunc (int a,int b) {
                 return a+b;
         }        

返回值类型:函数运行后的结果类型
参数类型:是形式参数的数据类型
形式参数:是一个变量,由于存储调用函数时传递给函数的实际参数
实际参数:传递给函数的具体值
return:用于结束函数
返回值:函数运算后的结果值,该值会返回给该函数的调用者 
注意:当函数没有返回值类型是用void来表示
如果返回值类型是void,name函数中的return语句可以省略不写

2.用这个编程语言实现基础的数据结构:

2.1 顺序表:

顺序表的实现:

public class SeqList{
 	private int length;//表长
    private int[] datas;//数据
}

顺序表的创建和初始化:

	/**
     * 创建空的顺序表
     */
    public SeqList() {
    }

    /**
     * 创建一个指定容量的顺序表
     *
     * @param capacity
     */
    public SeqList(int capacity) {
        length = 0;
        datas = new int[capacity];
    }

    /**
     * 构造指定容量和指定数组元素的顺序表
     * @param capacity
     * @param array
     */
    public SeqList(int capacity, int[] array) {
        if (capacity < array.length) {
            throw new IndexOutOfBoundsException();
        } else {
            length = 0;
            datas = new int[capacity];
            for (int i = 0; i < array.length; i++) {
                datas[i] = array[i];
                length++;
            }
        }
    }

    /**
     * 初始化表的最大容量
     *
     * @param capacity
     */
    public void create(int capacity) {
        if (datas != null) {
            throw new RuntimeException();
        } else {
            length = 0;
            datas = new int[capacity];
        }

    }

获取指定下标的元素:

   /**
     * 获取指定下标的元素
     *
     * @param index
     * @return
     */
    public int get(int index) {
        if (index <= length && index >= 0) {
            return datas[index];
        } else {
            throw new IndexOutOfBoundsException();
        }
    }

指定位置插入元素:

  /**
     * 指定位置插入元素
     *
     * @param index
     * @param element
     */
    public void insert(int index, int element) {
        if (index >= length || index < 0) {
            throw new IndexOutOfBoundsException();
        } else {
            if (length + 1 <= datas.length) {
                for (int i = length; i > index; i--) {
                    datas[i] = datas[i - 1];
                }
                datas[index] = element;
                length++;
            } else {
                System.out.println("表已满,无法插入");
            }
        }
    }

删除指定下标元素:

    /**
     * 删除指定下标元素
     *
     * @param index
     */
    public void delete(int index) {
        if (index < 0 || index >= length) {
            throw new IndexOutOfBoundsException();
        } else {
            for (int i = index; i < length - 1; i++) {
                datas[i] = datas[i + 1];
            }
            length--;
        }
    }

其他操作:

    /**
     * 在表尾添加元素
     *
     * @param element
     */
    public void add(int element) {
        if (datas.length <= length) {
            System.out.println("表已满,无法添加");
        } else {
            datas[length] = element;
            length++;
        }
    }


     /**
     * 判断表是否为空
     *
     * @return
     */
    public boolean isEmpty() {
        if (datas == null || (datas.length == 0 && length == 0)) {
            return true;
        } else {
            return false;
        }
    }


    /**
     * 清空表
     */
    public void clear() {
        datas = null;
        length = 0;
    }

    /**
     * 获取表长
     *
     * @return
     */
    public int length() {
        return length;
    }

    /**
     * 获取表的最大容量
     *
     * @return
     */
    public int getMaxSize() {
        return datas.length;
    }

输出顺序表的元素:

     /**
     * 重写toString(),输出表中元素
     *
     * @return
     */
    @Override
    public String toString() {
        if (length <= 0) {
            return null;
        } else {
            StringBuilder sb = new StringBuilder();
            sb.append("[");
            for (int i = 0; i < length; i++) {
                if (i == length - 1) {
                    sb.append(datas[i]);
                } else {
                    sb.append(datas[i] + ",");
                }
            }
            return sb.append("]").toString();
        }
    }

代码测试:

public class SeqListDemo {
    public static void main(String[] args) {
        int[] array=new int[]{2,4,8,3,6,1,4};
        System.out.println("//创建最大容量为10,指定数组元素的顺序表");
        SeqList seqList=new SeqList(10,array);//创建最大容量为10,指定数组元素的顺序表
        System.out.print("获取顺序表最大容量:");
        int maxSize = seqList.getMaxSize();
        System.out.println(maxSize);
        System.out.print("获取顺序表元素:");
        System.out.println(seqList.toString());
        System.out.print("获取顺序表长度:");
        System.out.println(seqList.length());
        System.out.print("添加元素0:");
        seqList.add(0);
        System.out.println(seqList.toString());
        System.out.print("在第1个数前插入元素10:");
        seqList.insert(0,10);
        System.out.println(seqList.toString());
        System.out.print("获取顺序表长度:");
        System.out.println(seqList.length());
        System.out.print("获取顺序表第3个数字:");
        System.out.println(seqList.get(2));
        System.out.println("清空顺序表");
        seqList.clear();
        System.out.print("顺序表元素:");
        System.out.println(seqList.toString());
    }
}

创建最大容量为10,指定数组元素的顺序表
获取顺序表最大容量:10
获取顺序表元素:[2,4,8,3,6,1,4]
获取顺序表长度:7
添加元素0:[2,4,8,3,6,1,4,0]
在第1个数前插入元素10:[10,2,4,8,3,6,1,4,0]
获取顺序表长度:9
获取顺序表第3个数字:4
清空顺序表元素:null

2.2 串:

Java String类:

创建字符串

创建一个String对象,并初始化一个值。
String类是不可改变的,一旦创建了一个String对象,它的值就不能改变了。
如果想对字符串做修改,需要使用StringBuffer&StringBuilder类。

//直接创建方式
String str1 = "abc";
//提供一个 字符数组 参数来初始化字符串
char[] strarray = {'a','b','c'};
String str2 = new String(strarray);

char 为字符类型,String为字符串类型
String 字符串是用" "来包含串的, char是用’ '来包含单字符的
String 内部用来存储的结果是一个char字符数组

字符串长度获取

int length()方法:返回字符串对象包含的字符数。

int len = str.length();
连接字符串

String concat(String str):连接两个字符串的方法
或者直接用‘+’操作符来连接

//String对象的连接
str1.concat(str2);

"两个字符串连接结果:"+str1+str2; 

字符串查找
int indexOf(String s):字符串s在指定字符串中首次出现的索引位置,如果没有检索到字符串s,该方法返回-1
int lastIndexOf(String s):字符串s在指定字符串中最后一次出现的索引位置,如果没有检索到字符串s,该方法返回-1;如果s是空字符串,则返回的结果与length方法的返回结果相同,即返回整个字符串的长度。

int idx = str.indexOf("a");//字符a在str中首次出现的位置
int idx = str.lastIndexOf("a");
获取指定位置的字符串

char charAt(int index)方法:返回指定索引出的字符

String str = "abcde";
char thischar = str.charAt(3);//索引为3的thischar是"d"

获取子字符串
String substring()方法:实现截取字符串,利用字符串的下标索引来截取(字符串的下标是从0开始的,在字符串中空格占用一个索引位置)
1. substring(int beginIndex):截取从指定索引位置开始到字符串结尾的子串
2. substring(int beginIndex, int endIndex):从beginIndex开始,到endIndex结束(不包括endIndex)

String str = "abcde";
String substr1 = str.substring(2);//substr1为"cde"
String substr2 = str.substring(2,4);//substr2为"cd"
去除字符串首尾的空格()

String trim()方法

String str = " ab cde ";
String str1 = str.trim();//str1为"ab cde"

字符串替换
1.String replace(char oldChar, char newChar):将指定的字符/字符串oldchar全部替换成新的字符/字符串newChar
2.String replaceAll(String regex, String replacement):使用给定的参数 replacement替换字符串所有匹配给定的正则表达式的子字符串
3. String replaceFirst(String regex, String replacement):使用给定replacement 替换此字符串匹配给定的正则表达式的第一个子字符串
regex是正则表达式,替换成功返回替换的字符串,替换失败返回原字符串

String str = "abcde";
String newstr = str.replace("a","A");//newstr为"Abcde"

判断字符串的开始与结尾
boolean startsWith()
1.boolean startsWith(String prefix):判断此字符串是否以指定的后缀prefix开始
2.boolean startsWith(String prefix, int beginidx):判断此字符串中从beginidx开始的子串是否以指定的后缀prefix开始
3. boolean endsWith(String suffix):判断此字符串是否以指定的后缀suffix结束

String str = "abcde";
boolean res = str.startsWith("ab");//res为true
boolean res = str.StartsWith("bc",1);//res为true
boolean res = str.endsWith("de");//res为true

判断字符串是否相等
1. boolean equals(Object anObject):将此字符串与指定的对象比较,区分大小写
2. boolean equalsIgnoreCase(String anotherString):将此 String 与另一个 String 比较,不考虑大小写

String str1 = "abcde";
String str2 = str1;//字符串str1和str2都是一个字符串对象
String str3 = "ABCDE";
boolean isEqualed = str1.equals(str2);//返回true
boolean isEqualed = str1.equals(str3);//返回false
boolean isEqualed = str1.equlasIgnoreCase(str3);//返回true

比较两个字符串
1. int compareTo(Object o):把这个字符串和另一个对象比较。
2. int compareTo(String anotherString):按字典顺序比较两个字符串。
比较对应字符的大小(ASCII码顺序),如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值;如果此字符串大于字符串参数,则返回一个大于 0 的值。

String str1 = "abcde";
String str2 = "abcde123";
String str3 = str1;
int res = str1.compareTo(str2);//res = -3
int res = str1.compareTo(str3);//res = 0
int res = str2.compareTo(str1);//res = 3
把字符串转换为相应的数值

String转int型:

//第一种
int i = Integer.parseInt(String str)
//第二种
int i = Integer.valueOf(s).intValue();

String转long型:

long l = Long.parseLong(String str);

String转double型:

double d = Double.valueOf(String str).doubleValue();//doubleValue()不要也可
double d = Double.parseDouble(str);

int转string型:

//第一种
String s = String.valueOf(i);
//第二种
String s = Integer.toString(i);
//第三种
String s = "" + i;
字符大小写转换

String toLowerCase():将字符串中的所有字符从大写字母改写为小写字母
String toUpperCase():将字符串中的所有字符从小写字母改写为大写字母

String str1 = "abcde";
String str2 = str1.toUpperCase();//str2 = "ABCDE";
String str3 = str2.toLowerCase();//str3 = "abcde";

字符串分割
String[] split():根据匹配给定的正则表达式来拆分字符串,将分割后的结果存入字符数组中。

1. String[] split(String regex):regex为正则表达式分隔符, . 、 $、 | 和 * 等转义字符,必须得加 \\;多个分隔符,可以用 | 作为连字符。
2. String[] split(String regex, int limit):limit为分割份数

String str = "Hello World A.B.C"
String[] res = str.split(" ");//res = {"Hello","World","A.B.C"}
String[] res = str.split(" ",2);//res = {"Hello","World A.B.C"}
String[] res = str.split("\\.");//res = {"Hello World A","B","C"}

String str = "A=1 and B=2 or C=3"
String[] res = str.split("and|or");//res = {"A=1 "," B=2 "," C=3"}
字符数组与字符串的转换

public String(char[] value) :通过char[]数组来创建字符串
char[] toCharArray():将此字符串转换为一个新的字符数组。

String str = "abcde";
char mychar[] = str.toCharArray();//char[0] = 'a'; char[1] = 'b'...

字符串与byte数组的转换
byte[] getBytes()
1. byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
2. byte[] getBytes(String charsetName):使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。

byte[] Str2 = Str1.getBytes();

StringBuffer&StringBuilder类
与String类最大的不同在于这两个类可以对字符串进行修改。
StringBuilder相较StringBuffer来说速度较快,多数情况下使用StringBuilder,但是StringBuilder的方法不是线性安全的(不能同步访问),所以在应用程序要求线程安全的情况下,必须使用StringBuffer。

创建StringBuffer字符串
StringBuffer str = new StringBuffer("");
添加字符(最常用方法)

public StringBuffer append(String s):将指定的字符串追加到字符序列中

str.append("abc");//此时str为“abc”
删除字符串中的指定字符

public delete(int start,int end):移除此序列中的子字符串的内容
public deleteCharAt(int i):删除指定位置的字符

str.delete(0,1);//此时str为“c”
str.deleteCharAt(str.length()-1);//删除最后一个字符
翻转字符串

public StringBuffer reverse()

str.reverse();

替换字符串中内容
replace(int start,int end,String str):用String类型的字符串str替换此字符串的子字符串中的内容

String s = "1";
str.replace(1,1,s);//此时str为"a1c"

插入字符
public insert(int offset, int i):将int参数形式的字符串表示形式插入此序列中

str.insert(1,2);

字符串长度
int length():返回长度(字符数)
void setLength(int new Length):设置字符序列的长度

str.length();
str.setLength(4);

当前容量
int capacity():获取当前容量
void ensureCapacity(int minimumCapacity):确保容量小于指定的最小值

str.capacity();

将其转变为String
String toString()

str.toString();//将StringBuffer类型的序列转变为String类型的字符串

设置指定索引处的字符
void setCharAt(int index,char ch):将给定索引处的字符设置为ch
其余方法和String类型的方法大致相同。

2.3 链表

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。
链表可分为单向链表和双向链表。
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

2.4 栈

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。

Stack()

除了由Vector定义的所有方法,自己也定义了一些方法:

实例:

import java.util.*;
 
public class StackDemo {
 
    static void showpush(Stack<Integer> st, int a) {
        st.push(new Integer(a));
        System.out.println("push(" + a + ")");
        System.out.println("stack: " + st);
    }
 
    static void showpop(Stack<Integer> st) {
        System.out.print("pop -> ");
        Integer a = (Integer) st.pop();
        System.out.println(a);
        System.out.println("stack: " + st);
    }
 
    public static void main(String args[]) {
        Stack<Integer> st = new Stack<Integer>();
        System.out.println("stack: " + st);
        showpush(st, 42);
        showpush(st, 66);
        showpush(st, 99);
        showpop(st);
        showpop(st);
        showpop(st);
        try {
            showpop(st);
        } catch (EmptyStackException e) {
            System.out.println("empty stack");
        }
    }
}

以上实例编译运行结果如下:

stack: [ ]
push(42)
stack: [42]
push(66)
stack: [42, 66]
push(99)
stack: [42, 66, 99]
pop -> 99
stack: [42, 66]
pop -> 66
stack: [42]
pop -> 42
stack: [ ]
pop -> empty stack

2.5 队列

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

import java.util.LinkedList;
import java.util.Queue;
 
public class Main {
    public static void main(String[] args) {
        //add()和remove()方法在失败的时候会抛出异常(不推荐)
        Queue<String> queue = new LinkedList<String>();
        //添加元素
        queue.offer("a");
        queue.offer("b");
        queue.offer("c");
        queue.offer("d");
        queue.offer("e");
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("element="+queue.element()); //返回第一个元素 
        for(String q : queue){
            System.out.println(q);
        }
        System.out.println("===");
        System.out.println("peek="+queue.peek()); //返回第一个元素 
        for(String q : queue){
            System.out.println(q);
        }
    }
}
a
b
c
d
e
===
poll=a
b
c
d
e
===
element=b
b
c
d
e
===
peek=b
b
c
d
e

2.6 树

在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  • 每个节点都只有有限个子节点或无子节点;
  • 没有父节点的节点称为根节点;
  • 每一个非根节点有且只有一个父节点;
  • 除了根节点外,每个子节点可以分为多个不相交的子树;
  • 树里面没有环路(cycle)

为什么需要树?
因为它结合了另外两种数据结构的优点: 一种是有序数组,另一种是链表。在树中查找数据项的速度和在有序数组中查找一样快, 并且插入数据项和删除数据项的速度也和链表一样。

// 节点类
class TreeNode {
    private int value;
    private TreeNode left;
    private TreeNode right;

    public TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }

    // 获取节点值
    public int getValue() {
        return value;
    }

    // 设置左子节点
    public void setLeft(TreeNode left) {
        this.left = left;
    }

    // 获取左子节点
    public TreeNode getLeft() {
        return left;
    }

    // 设置右子节点
    public void setRight(TreeNode right) {
        this.right = right;
    }

    // 获取右子节点
    public TreeNode getRight() {
        return right;
    }
}

// 树类
class Tree {
    private TreeNode root;

    public Tree() {
        this.root = null;
    }

    // 插入节点
    public void insert(int value) {
        root = insertNode(root, value);
    }

    private TreeNode insertNode(TreeNode node, int value) {
        if (node == null) {
            return new TreeNode(value);
        }

        if (value < node.getValue()) {
            node.setLeft(insertNode(node.getLeft(), value));
        } else if (value > node.getValue()) {
            node.setRight(insertNode(node.getRight(), value));
        }

        return node;
    }

    // 遍历树(示例为中序遍历)
    public void traverse() {
        inOrderTraversal(root);
    }

    private void inOrderTraversal(TreeNode node) {
        if (node != null) {
            inOrderTraversal(node.getLeft());
            System.out.print(node.getValue() + " ");
            inOrderTraversal(node.getRight());
        }
    }
}

// 测试代码
public class Main {
    public static void main(String[] args) {
        Tree tree = new Tree();

        // 插入节点
        tree.insert(5);
        tree.insert(3);
        tree.insert(7);
        tree.insert(2);
        tree.insert(4);
        tree.insert(6);
        tree.insert(8);

        // 遍历树
        tree.traverse();
    }
}

2.7 二叉树

二叉树的结构就是一个父节点挂一个或者两个子节点

2.8 二叉搜索树

2.9 图

2.10 邻接矩阵

2.11 邻接表

2.12 哈希表;

3. 刷一些基础的算法题,提升编程思维:

3.1 线性枚举,

3.2 排序,

3.3 模拟

3.4 贪心

3.5 二分枚举

3.6 深搜

3.7 广搜

4. 实战项目

非常简单的四子棋【java编写】 第一次写文章 阅读详情

相关推荐

Java从入门到精通需要多久?四到五个月真的是可以学好Java的吗?

虽然Java开发薪资待遇很好,但很多公司也不愿意花时间培养Java开发人才,公司一般都希望你上手就可以做。所以0基础想转行Java开发就比较困难了,要先把Java技术学好,那么Java入门到精通需要多长时间呢?今天小编就和大家来探讨下: 0基础学Java想要学到能找工作的地步,根据不同的学习路径所需的时间也是不同的。 第一种,选择全日制培训班培训Java开发。走这条路学Java学习时间相对比较短,...

Ybulingbuling的博客 8395

Java泛型实现四向节点矩阵链表

上周碰到一个Java的四向链表题,题目要求用泛型实现具有上下左右指针的四向节点,写一个算法生成 n x n 的四向节点矩阵链表,并写一个main函数接受输入n进行测试。

关注智践行,一起学机器人和AI技术 715

【复习之JAVA基础】Java三步走、Java特性、Java跨平台

一、Java三步走 编写源程序 在本地磁盘中新建一个名字为Hello的txt文件,写入如下代码 //类名与文件名相同 public class Hello{ public static void main(String[] args){ System.out.pri...

qq_36814499的博客 298

Java爬虫入门(四)——线程池和连接池

前言: 简而言之,这一块内容可以直接Google ,网上资料很多,我就不在这里多累赘了 线程池: 线程池,这一篇或许就够了 Java 四种线程池的用法分析 总结: 这次项目中线程池的目的是: 1. A线程池多并发爬取小说网站的小说链接, 加入到另一个线程池(实现分页爬取整个网站) 2. 多并发爬取获取到的小说 简单来说: 页面层面获取小说是多并发, 小说下载是多并...

qq_38409944的博客 2916

ATE测试基础——直流参数测试

芯片测试在发展过程中诞生了许多术语,初次接触的人大部分都会被绕晕。因此为方便广大读者理解,在开始介绍测试项之前,需要对测试领域的名词进行解释。还有部分较为抽象的内容,需要略作展开。DUT——Device Under Test,正在被测试的器件Pin——器件引脚,信号引脚分为输入,输出,三态和双向四类,负责与外界进行信息交互;电源引脚分为电源和地两类,结构与信号引脚不同,负责给器件内部运行和外部输出提供电平。输入:在外部信号和器件内部逻辑之间起缓冲作用的信号输入通道;

你骄傲地飞远的博客 1万+

Java基础入门

所谓跨平台指的是用Java语言开发的程序可以在多种操作系统上运行,常见的操作系统有Windows、Linux、MacOS系统。如果没有跨平台性,同一个应用程序,想要在多种操作系统上运行,需要针对各个操作系统单独开发应用。比如微信有Windows版本、MacOS版本、Android版本、IOS版本。

qq_58423640的博客 1万+

国密SSL实战:手把手教你用Wireshark抓包分析GMTLS协议(附证书链验证技巧)

本文提供了一份国密SSL(GMTLS)协议的实战抓包分析指南。通过详细讲解Wireshark的配置、GMTLS握手流程的捕获与筛选,以及双证书机制和证书链的深度解析,帮助工程师和开发人员掌握使用Wireshark排查国密SSL连接问题、进行密评和协议调试的核心技巧。

rgv234567的博客 502

四子棋 java_Java实现四连环棋游戏

本文实例为大家分享了Java实现四连环棋游戏的具体代码,供大家参考,具体内容如下游戏规则:(1)双人游戏,有黑红两色棋子,双方各执一色棋子。(2)空棋局开盘,黑棋先发,从最上面一行开始下,棋子会落到最下行。(3)黑、红交替下子,每次只能下一子,从最上行开始下。(4)棋子下在任何位置,都会掉落至该列的最下方的空格处,只有该列已有棋子时,该棋子才落在该列最上面棋子的上一格(就是往上摞棋子),以此类推。...

weixin_32579395的博客 1100

关于DHCP Option60的认识

<br />       最近在网络建设过程中,必须面对一个实际存在的问题:当只有一根线入户时,该如何解决CATV和宽带业务的共存呢?这时就要考虑用到DHCP Option60了,那么DHCP Option60到底是如何来实现业务区分的呢?<br />首先先来看下DHCP协议,在DHCP协议中,定义了一个option字段,该字段主要是用来扩展DHCP协议的,Option 60 (Vendor class identifier)是DHCP报文中的一个选项字段,code为60,可以标识终端类型,根据不同的终

luoyingchuan的专栏 7940

骨架动作识别新突破:CTR-GCN的通道拓扑优化策略解析

本文深入解析了CTR-GCN在骨架动作识别中的通道拓扑优化策略。通过引入通道级拓扑细化,CTR-GCN克服了传统GCN共享拓扑结构的局限性,显著提升了动作识别的准确率。文章详细介绍了CTR-GCN的三大核心组件设计,包括特征变换模块、通道拓扑建模和通道聚合技术,并提供了实战调参经验和模型压缩技巧,为计算机视觉领域的研究者和开发者提供了有价值的参考。

weixin_27310417的博客 193

如何学好编程?黄金四步走

关于编程学习的最佳方法就是:重复地阅读代码和编写代码(读>写代码>读>写代码),阅读书籍、博客文章、开源代码,了解语言或系统,自己实际去写代码。下面分为四步走给大家说下!

黑马程序员官方博客 8万+

VIO实战前传:手把手教你解读Kalibr双目IMU标定报告与参数应用

本文详细解析Kalibr双目IMU联合标定报告的核心参数与应用方法,涵盖重投影误差分析、IMU误差指标解读、关键变换矩阵原理及VINS-Fusion实战配置。通过手把手教学帮助开发者准确理解标定结果,解决VIO算法落地中的参数配置难题,提升视觉惯性里程计的系统稳定性与精度。

weixin_42699679的博客 332

Java从入门到精通 - Java入门

本文介绍了Java的快速入门,包含Java背景、搭建Java开发环境、IDEA开发工具的使用、Java基础语法

xian_x_的博客 3494

SAR成像专栏目录

为方便大家阅读,我做了一个专栏目录,蓝色字有超链接,可以直接打开。 本专栏默认读者已具备雷达系统的基本知识或者已阅读过雷达导论专栏中的文章。 1. 概述 SAR成像概述 星载SAR的各项指标解读(史上最全) SAR成像算法的实现途径与算力分析 2. SAR成像原理与SAR系统简介 雷达与分辨率 SAR成像原理与方法 SAR图像的形成和处理 SAR系统设计 3. 点目标仿真 点目标仿真(一)—— 数学模型 点目标仿真(二)—— Matlab仿真 4. 成像算法 更新中 雷达导论专

7470

构建AI Agent驱动的智能健康管理系统

数据碎片化:健康数据分散在不同的设备和平台中,难以统一管理和分析。个性化不足:健康管理方案通常是通用的,难以根据个人的健康状况实时调整。用户参与度低:用户难以获得及时、个性化的健康建议,导致健康管理效果不佳。AI Agent是一个能够感知环境、采取行动以实现目标的智能实体。根据智能体的智能水平,可以分为简单反应式智能体和复杂适应式智能体。实时监测健康数据。获取个性化的健康建议。收到健康风险预警。

AI天才研究院 749

开篇词 | 入门Spark,你需要学会“三步走”

你好,我是吴磊,欢迎和我一起入门学习Spark。在过去的7年里,我一直在围绕着Spark来规划我的职业发展。2014年,Spark以“星火燎原”之势席卷了整个大数据生态圈,正是在那个时候,我结识了Spark。起初,怀揣着强烈的好奇心,我花了一个星期,用Spark重写了公司(IBM)的ETL任务。让我颇为惊讶的是,Spark版本的ETL任务,在执行性能上提升了一个数量级。从那以后,我便深深地着迷于S...

优快云学习 539

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | 引入GCConv卷积改进YOLO26,含GCC3k2二次创新,能够捕捉更加丰富和复杂的特征信息,助力高效涨点

本文提出了一种基于GCConv模块的YOLO26目标检测模型改进方案。GCConv模块通过多路径结构增强特征学习能力,在训练阶段采用垂直多卷积和水平多路径配置,推理时重参数化为单一3x3卷积,显著提升推理速度而不损失性能。实验表明,该模块在复杂场景和多尺度目标检测任务中表现优异,特别适合资源受限的实时应用场景。文章详细介绍了GCConv的网络结构、核心代码实现、YAML配置文件修改方法,并提供了两种改进方案(GCConv和GCC3k2)的具体配置指导。

Ai缝合怪、助力小伙伴高效发论文 321

从变量到递归:Java 编程入门的 “两步走” 与实战思考

本文介绍了Java编程入门的两大核心基础:变量定义和方法编写。变量定义需掌握类型、命名和赋值三要素,强调强类型语言的特点和命名规范。方法编写则从基本结构入手,通过递归案例(如斐波那契数列)详解方法调用过程。文章建议学习时先理解原理再动手实践,从简单案例开始逐步深入,强调打好变量和方法基础对后续学习的重要性。最后鼓励读者通过拆解方法执行过程来加深理解,培养编程思维。

2503_93478681的博客 640

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java笔记——JAVA入门_java 入门博客

讲完IDEA相关配置之后,接下来给大家讲一个很重要的IDEA的使用技巧,这就是IDEA的快捷键,所谓快捷键就是通过键盘上的按键组合起来,就可以帮我们生成代码。为了引导大家正确的完成IDEA的下载和安装,给小伙伴们单独提供了一个文档《IDEA安装、使用、配置.pdf》,文档中提供了IDEA详细的安装和使用步骤,大家只需要按照文档的步骤一步一步操作就行。在前几节课中我们已经安装了JDK,并且开发了一个Java入门程序,用javac命令编译,用Java命令运行,但是对于Java程序的执行原理并没有过多的介绍。

a25847a的博客 1022

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

银行卡四要素验证如何用Java调用

银行卡四要素验证又叫银行卡四要素核验,银行卡实名核验,银行卡四元素验证,传入银行卡卡号、姓名、身份证号码、手机号,验证此四要素是否一致,支持所有带银联标识的银行卡。

loosenK 1631

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java笔记——如何快速入门 Java?

这是一个基于 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技术栈实现的社区系统,采用主流的互联网技术架构、全新的UI设计、支持一键源码部署,拥有完整的文章&教程发布/搜索/评论/统计流程等,代码完全开源,没有任何二次封装,是一个非常适合二次开发/实战的现代化社区项目?对于新人来说,最重要的是掌握 Java 后端开发四大件,Java 基础、Spring Boot、MySQL、Redis。

a25847a的博客 1770

算法入门四:函数与函数体:

文章目录算法入门四:函数与函数体:引言:函数与函数体:章节介绍:1.洛谷 p5735 Java 距离函数2.洛谷 p5737 Java 闰年展示3.洛谷 p5739 Java 计算阶乘4.洛谷 p1304 Java 哥德巴赫猜想5.洛谷 p2415 Java 集合求和6.洛谷 p5743 Java 猴子吃桃7.洛谷 p5744 Java 培训8.洛谷 p5736 Java 质数筛9.洛谷 p5738 Java 歌唱比赛10.洛谷 p5740 Java 最厉害的学生11.洛谷 p5741 Java 旗鼓相当的

weixin_51261234的博客 2046

Java如何快速入门?Java基础_Java入门

小编认为对接触Java的小白来说,最担心的应该就是Java怎么学,都需要掌握哪些内容?今天这篇文章希望能帮助大家快速入门Java,少走弯路! 一、作为刚接触Java的新手,肯定要先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念:JVM、JDK、JRE以及Java面向对象思想,同时要会学到如何在系统中搭建Java开发环境,以及如何利用第三方工具进行Java程序的开发。 学习Java语言最重要的是:学习步骤和方法 只要找到适合自己的学习方式,找到适合自己现阶段的学习资料

m0_46184557的博客 4480

Java数据库操作:JDBC入门5步走

JDBC其实就是Java操作数据库的“桥梁”,核心步骤就5个:导入驱动→建立连接→执行SQL→处理结果→关闭资源。新手不用一开始就追求高深的知识,先把基础步骤练熟,写几个增删改查的例子,慢慢就能理解背后的逻辑了。我刚开始练的时候,经常因为URL写错、密码输错、忘记关闭资源报错,多试几次、多查几次错误信息就好了。编程这东西,光看没用,一定要动手写!

2501_93889296的博客 907

【Java零基础入门篇】第 ② 期 - Java语言基础(四)

【Java零基础入门篇】第 ② 期 - Java语言基础(四)

VLOKL的博客 784
上一篇: 简单了解Element Plus
下一篇: Java学习路线大纲
知昂可
博客等级 码龄6年 1032粉丝 83原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值