Python工程师Java之路(i)泛型、Iterator、Collection、Map

Python map函数深度解析:从惰性迭代器到数据流编程 map 是 Python 中实现函数式数据转换的核心内置函数,其本质是一个返回惰性迭代器的高阶函数,遵循‘输入不可变、输出延迟计算’的设计原则。它通过 C 层优化调度内置函数,在处理大规模序列时显著降低内存占用并提升吞吐效率。相比 for 循环或列表推导式,map 更强调声明式编程思维,天然适配 filter、chain、islice 等流式处理工具,构成 MapReduce 本地模拟与大数据预处理的基础能力。本文结合 CPython 源码机制、性能实测与 7 类工程场景,系统阐释 map 的正确用法、典型 阅读详情

1、泛型

Java声明方法时,当在完成方法功能时如果有未知的数据需要参与,这些未知的数据需要在调用方法时才能确定,那么我们把这样的数据通过形参表示。那么在方法体中,用这个形参名来代表那个未知的数据,而调用者在调用时,对应的传入值就可以了

于是JDK1.5设计了泛型的概念

泛型即为“类型参数”,这个类型参数在声明它的类、接口或方法中,代表未知的通用的类型

java.util.Comparator是用于对象比较大小的规范接口,在过去,不确定对象是什么类型,只能用Object类型表示,因此JDK1.5就给它们增加了泛型,示例如下,留意<T>

import java.util.Comparator;

class CircleComparator1 implements Comparator {
    @Override
    public int compare(Object o1, Object o2) {
        //强制类型转换
        Circle c1 = (Circle) o1;
        Circle c2 = (Circle) o2;
        return Double.compare(c1.radius, c2.radius);
    }
}

class CircleComparator2 implements Comparator<Circle> {
    @Override
    public int compare(Circle o1, Circle o2) {
        // 不需要强制类型转换,代码更简洁
        return Double.compare(o1.radius, o2.radius);
    }
}

class Circle {
    double radius;
    Circle(double radius) {
        this.radius = radius;
    }
}

public class Hello {
    public static void main(String[] args) {
        // 不使用泛型
        CircleComparator1 c1 = new CircleComparator1();
        System.out.println(c1.compare(new Circle(1), new Circle(2)));
        System.out.println(c1.compare("圆1", "圆2")); // 编译不报错,运行时ClassCastException
        // 使用泛型
        CircleComparator2 c2 = new CircleComparator2();
        System.out.println(c2.compare(new Circle(1), new Circle(2)));
        System.out.println(c2.compare("圆1", "圆2")); // 编译报错,而不是冒着风险在运行时再报错
    }
}

1.1、泛型类与泛型接口

语法格式:

class 类名<类型变量列表>{}
interface 接口名<类型变量列表>{}
  • <类型变量列表>:可以是n个类型变量,一般用单个的大写字母,如:<T>、<K,V>…
  • <类型变量列表>中的类型变量不能用于静态成员上。

场景:
学生类包含姓名和成绩,而此时学生的成绩类型不确定
因为语文老师希望成绩是【“优秀”、“良好”、“及格”、“不及格”】
数学老师希望成绩是【89、65】
英语老师希望成绩是【‘A’,‘B’,‘C’,‘D’,‘E’】
那么我们在设计这个学生类时就可以使用泛型

class Student<T> {
    String name;
    T score;
    public Student(String name, T score) {
        this.name = name;
        this.score = score;
    }
}

测试学生类

1.1.1、继承泛型类

class Student<T> {
    String name;
    T score;
    public Student(String name, T score) {
        super();
        this.name = name;
        this.score = score;
    }
}

class Pupil extends Student<Double> {
    public Pupil(String name, Double score) {
        super(name, score);
    }
}

public class Hello {
    public static void main(String[] args) {
        Pupil p = new Pupil("小黄", 99.5);
    }
}

1.1.2、泛型设定上限

语法格式:

<类型变量 extends 上限>
<类型变量 extends 上限1 & 上限2>

示例:
限定只能为数字类

1.1.3、泛型擦除

当使用参数化类型的类或接口时,如果没有指定泛型,会发生泛型擦除,自动按照最左边的第一个上限处理。如果没有指定上限,上限即为Object


1.2、泛型方法

什么情况需要声明泛型方法?

(情况一)如果某个静态方法想要使用泛型,需要单独设计
例如:java.util.Arrays的public static <T> List<T> asList(T... a)

(情况二)如果泛型类或泛型接口上的泛型形参不适用于某一个方法,该方法静态非静态都可
例如:java.util.Collection<E>的public abstract <T> T[] toArray(T[] a)

语法格式:

【修饰符】 <类型变量列表> 返回值类型 方法名(【形参列表】)【throws 异常列表】{
    //...
}

1.3、类型通配符

  • <?>:代表可以是任意类型
  • <? extends 上限>:代表上限或上限的子类
  • <? super 下限>:代表下限或下限的父类
import java.util.ArrayList;

class Animal {}
class Cat extends Animal {}
class Tiger extends Cat {}

public class Hello {
    public static void main(String[] args) {
        ArrayList<Animal> animals = new ArrayList<>();
        ArrayList<Cat> cats = new ArrayList<>();
        ArrayList<Tiger> tigers = new ArrayList<>();
        Hello hello = new Hello();
        //
        hello.print3(animals);
        hello.print3(tigers);
        //
        hello.print4(animals);
        hello.print4(tigers);
    }

    public void print1(ArrayList arrayList) {}
    public void print2(ArrayList<?> arrayList) {}
    public void print3(ArrayList<? extends Cat> arrayList) {}
    public void print4(ArrayList<? super Cat> arrayList) {}
}

2、自写一个动态数组

import java.util.Arrays;

public class MyArrayList {
    private Object[] container; //存储对象的数组
    private int size; //实际元素的个数

    public MyArrayList() {
        container = new Object[5];
    }

    //数组容量
    public int capacity() {
        return container.length;
    }

    //检查container是否需要扩容,如果满了就扩容为原来的2倍
    private void checkCapacity() {
        if (size >= capacity()) {
            container = Arrays.copyOf(container, container.length * 2);
        }
    }

    //添加一个元素
    public void add(Object obj) {
        checkCapacity();
        container[size++] = obj;
    }

    //校验index的合理性范围
    private void checkIndex(int index) {
        if (index < 0 || index >= size) {
            throw new IndexOutOfBoundsException(index + "越界");
        }
    }

    //获取[index]位置的元素
    public Object get(int index) {
        checkIndex(index);
        return container[index];
    }

    //替换[index]位置的元素
    public void set(int index, Object value) {
        checkIndex(index);
        container[index] = value;
    }

    //在[index]位置插入一个元素value
    public void insert(int index, Object value) {
        //(1)考虑下标的合理性:校验index的合理性范围
        checkIndex(index);
        //(2)总长度是否够:检查是否需要扩容
        checkCapacity();
        //(3)[index]以及后面的元素往后移动,把[index]位置腾出来
        /*
         * 假设total = 5, container.length= 10, index= 1
         * 有效元素的下标[0,4]
         * 移动:[1]->[2],[2]->[3],[3]->[4],[4]->[5]
         * 移动元素的个数:size-index
         */
        System.arraycopy(container, index, container, index + 1, size - index);
        //(4)放入新元素
        container[index] = value;
        //(5)有效元素的个数增加
        size++;
    }

    //返回所有实际存储的元素
    public Object[] getAll() {
        return Arrays.copyOf(container, size);
    }

    //删除[index]位置的元素
    public void remove(int index) {
        /*
         * (1)校验index的合理性范围
         * (2)移动元素,把[index+1]以及后面的元素往前移动
         * (3)把container[size-1]=null  让垃圾回收器尽快回收
         * (4)总元素个数减少 size--
         */

        //(1)考虑下标的合理性:校验index的合理性范围
        checkIndex(index);

        //(2)移动元素,把[index+1]以及后面的元素往前移动
        /*
         * 假设total=8, container.length=10, index = 3
         * 有效元素的范围[0,7]
         * 移动:[4]->[3],[5]->[4],[6]->[5],[7]->[6]
         * 移动了4个:size-index-1
         */
        System.arraycopy(container, index + 1, container, index, size - index - 1);

        //(3)把container[size-1]=null  让垃圾回收器尽快回收
        container[size - 1] = null;

        //(4)总元素个数减少 size--
        size--;
    }

    //查询某个元素的下标
    public int indexOf(Object obj) {
        if (obj == null) {
            for (int i = 0; i < size; i++) {
                if (container[i] == null) {
                    return i;
                }
            }
        } else {
            for (int i = 0; i < container.length; i++) {
                if (obj.equals(container[i])) {
                    return i;
                }
            }
        }
        return -1;
    }

    //删除数组中的某个元素(若有重复,只删第一个)
    public void remove(Object obj) {
        //查询索引
        int index = indexOf(obj);
        //按索引删除
        if (index != -1) {
            remove(index);
        }
    }
}

3、Iterator

iterator(迭代器)部分源码如下:

public interface Iterator<E> {

    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
}

4、Iterable、Collection

iterable:可迭代的
collection:聚集

import java.util.Iterator;

public interface Collection<E> extends Iterable<E> {
    // Query Operations

    int size();

    boolean isEmpty();

    boolean contains(Object o);

    Iterator<E> iterator();

    Object[] toArray();

    <T> T[] toArray(T[] a);

    // Modification Operations

    boolean add(E e);

    boolean remove(Object o);

    // Bulk Operations

    boolean containsAll(Collection<?> c);

    boolean addAll(Collection<? extends E> c);

    boolean removeAll(Collection<?> c);

    boolean retainAll(Collection<?> c);

    void clear();
}

4.1、List(类似Python的list)

  • List是接口,元素有顺序,元素可重复
  • 其下实现类有ArrayList(遍历效率更高)和LinkedList(增删效率更高)
  • 部分源码如下
import java.util.Iterator;

public interface List<E> extends Collection<E> {
    int size();                   // 获取元素个数

    boolean isEmpty();            // 是否为空

    boolean contains(Object o);   // 是否包含

    Iterator<E> iterator();

    Object[] toArray();

    <T> T[] toArray(T[] a);

    boolean add(E e);             // 添加一个

    boolean remove(Object o);     // 移除一个

    boolean containsAll(Collection<?> c);      // 是否包含全部

    boolean addAll(Collection<? extends E> c); // 添加多个

    boolean addAll(int index, Collection<? extends E> c);

    boolean removeAll(Collection<?> c);        // 移除多个

    boolean retainAll(Collection<?> c);        // ≈交集

    void clear();                              // 清空所有元素

    // Positional Access Operations

    E get(int index);                          // 按索引取值

    E set(int index, E element);               // 按索引设置值

    void add(int index, E element);            // 按索引添加值

    E remove(int index);                       // 按索引移除值(并返回)

    // Search Operations

    int indexOf(Object o);                     // 根据值找索引(第一个)

    int lastIndexOf(Object o);                 // 根据值找索引(最后一个)

    // View

    List<E> subList(int fromIndex, int toIndex);  // 子集(切片)
}

4.1.1、LinkedList

import java.util.LinkedList;

// 创建ArrayList对象
LinkedList<String> ls = new LinkedList<>();
// 添加元素
ls.addFirst("2");
ls.addLast("3");
ls.add(1, "4");
// 查看
System.out.println(ls); // [2, 4, 3]
// 子列表
System.out.println(ls.subList(1, 2)); // [4]
// 按索引获取
System.out.println(ls.get(0)); // 2
// 包含
System.out.println(ls.contains("4")); // true

4.2、Set

  • Set特点:元素不可重复
  • HashSet:底层是HashMap,无序的
  • TreeSet:底层是TreeMap,顺序按照元素的大小
  • LinkedHashSet:是HashSet的子类,比父类多维护了元素的添加顺序

4.2.1、HashSet(有点像Python的set)

import java.util.HashSet;

  • 元素不能重复,元素没有顺序
  • 部分源码如下,它使用了HashMap
public class HashSet<E>
        extends AbstractSet<E>
        implements Set<E>, Cloneable, java.io.Serializable
{
    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

    public HashSet() {
        map = new HashMap<>();
    }

    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }
    
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

    public int size() {
        return map.size();
    }

    public boolean isEmpty() {
        return map.isEmpty();
    }

    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

    public void clear() {
        map.clear();
    }
}

5、Map

  • Map<K,V>
  • put:设置键值对
  • get:按键获取值
  • entrySet:遍历键值对

5.1、HashMap(类似Python的dict)

import java.util.HashMap;

// 创建
HashMap<String, Integer> map = new HashMap<>();
// 添加
map.put("剑圣", 8);
map.put("先知", 6);
map.put("巫妖", 5);
System.out.println(map); // {巫妖=5, 先知=6, 剑圣=8}
// 获取
System.out.println(map.get("剑圣")); // 8
System.out.println(map.get("大法师")); // null
// 移除
System.out.println(map.remove("先知")); // 6
System.out.println(map); // {巫妖=5, 剑圣=8}
// 获取全部键或值
System.out.println(map.keySet()); // [巫妖, 剑圣]
System.out.println(map.values()); // [5, 8]
// 遍历键值对
for (Map.Entry<String, Integer> stringIntegerEntry : map.entrySet()) {
    System.out.println(stringIntegerEntry);
} // 巫妖=5 剑圣=8

6、Collections

import java.util.ArrayList;
import java.util.Collections;

public class Hello {
    public static void main(String[] args) {
        ArrayList<Integer> a = new ArrayList<>();
        // 一次性给a添加多个元素
        Collections.addAll(a, 5, 4, 3, 2, 1);
        System.out.println(a);
        // 乱序
        Collections.shuffle(a);
        System.out.println(a);
        // 排序(默认升序)
        Collections.sort(a);
        System.out.println(a);
        // 二分查找
        int i = Collections.binarySearch(a, 4);
        System.out.println(i);
    }
}
JavaScript Map和Set底层原理与工程选型指南 Map和Set是JavaScript中基于哈希表实现的核心集合类型,区别于Object和Array的本质在于其支持任意类型键、O(1)查找复杂度及严格插入顺序保证。其底层采用SameValueZero相等算法与内存地址哈希机制,使对象作键、NaN判等、高频成员查询等场景具备不可替代性。技术价值体现在性能跃升(如防重复提交、权限校验)、语义精准(键值对语义明确、去重逻辑内建)与内存可控(惰性迭代、WeakMap弱引用)。典型应用场景包括用户行为日志聚合、React异步状态管理、算法题两数之和求解等。本文聚焦m 阅读详情

相关推荐

OpenIddict实战:5步搞定.NET Core应用的OIDC单点登录集成

本文详细介绍了如何使用OpenIddict在.NET Core应用中快速实现OIDC单点登录集成。通过五个关键步骤,包括环境准备、数据库集成、客户端注册、令牌配置和多应用SSO集成,帮助开发者高效构建安全的企业级单点登录解决方案。

lambda的博客 728

入门学习 - 列表List,泛型

集合类 列表List当我们有很多类型⼀样的数据的时候,前⾯我们⼀般使⽤数组来进⾏管理,但是这样有个缺点就是数组的⼤⼩是固定的。如果我们很多类型⼀样的数据,⽐如游戏得分,我们可以集合类来进⾏管理,⽐如列表List,我们可以使⽤列表List很⽅便的添加数据,删除数据还有其他对数据的操作。

qq_43720139的博客 973

MaaS 商业模式全面分析报告:从技术赋能到商业变现的全链条探索

MaaS(模型即服务)商业模式正成为AI产业主流,2024年上半年中国市场规模达2.5亿元,预计2027年占比将提升至47%。该模式通过云服务提供预训练AI模型,大幅降低企业应用AI的技术门槛和成本。核心盈利方式包括按使用量计费、订阅制、定制化服务等,其中混合模式因灵活性成为趋势。MaaS产业链包含模型提供商、云平台、应用开发商和最终用户,重塑了AI产业格局。随着《数据法案》等监管加强,数据增值服务面临更严格合规要求。未来五年,中国MaaS市场增速预计超50%,用户规模将从2025年2.1亿增至2030年5

芯片行业20年 · 参与定义实现千万级量产出货 · AI芯片PM 2893

Collection接口(Collections)--List(ArrayList、LinkedList )--Set(HashSet、LinkedHashSet、TreeSet)

包装类 整型 Byte b = new Byte((byte)111); Short s = new Short((short)111); Integer i = new Integer(111); Long l = new Long(23); Long l1 = 1l; Long l1 = 1;会报错 浮点型 Float f = new Float(2); Float f1= 2f; Float f1=3.2会报错 Double d = new Double(2); Double d1 = 2d; Do

weixin_45508707的博客 242

ComfyUI Impact Pack实战:如何用三大检测器打造高效人脸修复工作流(附2025最新模板)

本文详细解析了如何利用ComfyUI Impact Pack中的BBOX、Segm和SAM三大检测器构建高效人脸修复工作流。通过技术选型、参数优化和实战案例,帮助用户掌握从精准定位到细节修复的全流程技巧,特别适用于商业摄影和影视制作场景。文章还提供了2025年最新模板和性能优化方案,显著提升人脸精修效率。

weixin_29040367的博客 246

从噪声中提取真相:LabVIEW振动信号积分处理的降噪艺术

本文深入探讨了LabVIEW在振动信号积分处理中的降噪技术,揭示了如何通过选择性频率加权从噪声中提取关键故障特征。详细介绍了时域和频域积分方法的实现原理及优化策略,并结合工业案例展示了多轴信号联合降噪的实际应用效果,为设备状态监测提供了高效解决方案。

weixin_29164185的博客 304

初见Python中的泛型

这里写目录标题类型提示了解标准库typing初见泛型小试泛型泛型示例完整代码 不知道从什么时候起,我写Python代码习惯给变量加上类型注解。这虽然降低了Python的灵活性,但确确实实在后续维护的过程中提供了很好的帮助。 第一次听到泛型这个词,是在Java中了解到的,但具体做什么,有什么作用,都是比较模糊的。因为我本身对Java只是了解并且也没有用Java做过什么实际项目,所以一直对泛型不太明白。 在官方文档中描述了泛型的使用方法,我将从小例子开始,看看泛型是如何帮助我们的。 类型提示 当前有一个get函

mkdir700的博客 9853

Win10平台下QT6.9.0 OpenCV 4.10.0从入门到精通

我最近开发一个视觉项目,我们从0开始记录在windows 10下 用QT6.9+OpenCV 4.10.0搞定整个项目的开发过程。以抛砖引玉,大家共同进步。

fds111111的博客 1713

JavaSE基础——泛型、可变参数

1. 泛型 1.1 泛型概述和好处 泛型概述 是JDK5中引入的特性,它提供了编译时类型安全检测机制,该机制允许在编译时检测到非法的类型 它的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。一提到参数,最熟悉的就是定义方 法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具 体的类型参数化,然后在使用/调用时传入具体的类型。这种参数类型可以用在类、方法和接口中,分别被称 为泛型类、泛型方法、泛型接口 泛型定义格式 <类型&gt

weixin_45519210的博客 432

SPL06气压温度传感器SPI驱动与补偿算法详解

气压传感器与温度传感器是嵌入式环境感知系统的核心组件,其测量精度高度依赖于MEMS芯片的校准参数与非线性补偿机制。SPL06作为集成式高精度数字传感器,采用24位Σ-Δ ADC与片内补偿引擎,需结合唯一出厂校准系数(即‘芯片指纹’)进行多阶数学修正,才能将原始ADC值转化为符合计量要求的帕斯卡(Pa)与摄氏度(℃)物理量。该过程涵盖SPI通信协议解析、寄存器时序控制、大端数据拼接、二进制补码处理及浮点/定点混合运算等典型嵌入式工程实践。广泛应用于无人机高度计、智能穿戴海拔监测与IoT气象终端中。

weixin_34640289的博客 143

Figma做原型设计一篇教会你,全栈软件开发必备技能,前后端岗位锐减找工作的底牌

本文介绍了使用Figma进行前端应用原型设计的方法与优势。Figma作为主流设计工具,能够满足大多数应用系统的原型设计需求,强调系统设计应保持简洁合理。文章详细说明了Figma的基本操作流程,包括创建Frame页面、组件使用、交互设置等核心功能,并指出命名规范的重要性。同时对比了Axure、墨刀等其他设计工具的特点,建议根据具体需求选择合适的平台。最后强调原型设计主要关注交互功能展示,业务逻辑应通过需求文档表述。整体而言,Figma凭借其简洁高效的特点,已成为原型设计的优选工具。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 463

Map、泛型

Map: Map集合是一种映射集合,Map集合中存在一种对应关系key--value键值对 要求: 1.key的值必须是唯一的不能重复 2.value可以重复不唯一 1个key只能对应一个value,但是同一个value可以对应多个key HashMap 子类: LinkedHashMap:双向链表、没有特殊方法 TreeMap:底层是红黑二叉树实现,默认提供对key从小到大排序 Has...

weixin_42764556的博客 3358

OpenClaw 多机器人多 Agent 模式:打造你的 AI 助手团队

OpenClaw多Agent模式为企业提供高效的AI助手团队解决方案。通过创建4个独立的飞书机器人(主助理、内容创作、技术开发、AI资讯),每个连接专属Gateway和Agent模型(如Claude Opus/Sonnet、Gemini 2.5),实现专业分工。相比单Agent模式,多Gateway架构具有配置清晰、互不干扰、无需手动切换等优势。系统采用Profile隔离机制,各Agent拥有独立配置和端口。部署过程包括创建机器人应用、配置Agent、运行自动化脚本等步骤,支持私聊或群组@使用。日常提供状态

Maynor的博客 5105

遍历Map集合四中方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33975951的博客 106

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java Set转List的5种方法与生产级避坑指南

在Java集合操作中,Set转List表面是基础类型转换,实则涉及泛型擦除、内存分配、线程安全与JVM优化等核心机制。理解ArrayList构造器如何预分配容量、Arrays.asList()为何因toArray()返回Object[]导致类型丢失、Stream API在链式处理与性能间的权衡,是保障类型安全转换和语义一致性的关键。该操作直接影响高并发场景下的数据一致性、百万级数据转换时的GC压力,以及金融、电商、IoT等系统中库存扣减、设备状态聚合等典型应用场景的稳定性。本文聚焦Java开发中最易被低估的

weixin_34413802的博客 471

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

遍历Map的四种方法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34380296的博客 259

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Map的四种遍历方式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34395205的博客 101

Java集合框架面试40题精讲:从HashMap源码到并发实战

数据结构是计算机科学的核心基础,它定义了数据组织、存储和操作的方式,直接影响程序的性能和效率。在Java生态中,集合框架作为数据结构的标准实现,通过数组、链表、树等结构,封装了高效的增删改查算法,其价值在于为开发者提供了统一、可靠的数据管理工具,极大提升了开发效率和代码质量。在实际应用场景中,无论是缓存设计、任务调度还是业务数据处理,都离不开对集合的深入理解和正确使用。本文聚焦Java集合框架,深入剖析HashMap的底层实现与扩容机制,并探讨ConcurrentHashMap如何通过CAS和分段锁实现高并

weixin_34055787的博客 487

Map中的KeySet和entrySet的用法

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34261739的博客 211

AI再工业化:从GPU算力到边缘部署的智能制造技术栈解析

在智能制造与工业4.0的演进中,AI正从单一的数据中心走向真实的工厂产线。大模型、计算机视觉与机器人技术的融合,使传统自动化从固定程序转向数据驱动的智能决策。GPU算力为模型训练提供基础,而边缘计算与TensorRT等推理优化则确保实时检测的可靠性。数字孪生通过虚拟仿真降低产线调试成本,智能体与RAG架构则让大模型辅助设备维护与知识管理。从视觉缺陷检测到预测性维护,开发者需要掌握从模型训练、ONNX转换到边缘部署的完整技能链。本文基于英伟达技术栈,拆解AI再工业化背后的关键技术路径,并提供一个PCB缺陷检测

weixin_34319111的博客 329

Java之HashMap迭代删除使用方法小结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34273481的博客 509

Python函数式编程实战:生成器驱动的数据流水线

函数式编程是一种以数据流为核心、强调无状态变换的编程范式,其核心原理在于将计算建模为‘输入→变换→输出’的纯函数链式调用。在Python中,它并非追求Haskell式的严格纯函数,而是通过生成器、map/filter/reduce、高阶函数等轻量机制,实现内存友好、可组合、易测试的数据处理能力。技术价值体现在显著降低中间状态管理成本、规避大文件OOM风险、提升流水线可维护性;典型应用场景包括日志分析、ETL清洗、API响应流处理及实时指标聚合。本文聚焦Python特有的函数式实践路径,深入解析生成器惰性求值

dianxi0949的博客 464

第3章:OpenJDK从源码到字节码——Class 文件与 javac 管线

文章摘要 本文通过一个团队从JDK 8升级到JDK 21时遇到的反射异常问题,揭示了Java字节码层面的兼容性挑战。项目背景中指出了开发者面临的三大痛点:黑盒编译、语法糖陷阱和字节码增强盲区。随后通过师徒对话的形式,生动讲解了Class文件结构(魔数、常量池)和关键字节码指令(如invokevirtual等)。最后给出实战示例,分析自动装箱、泛型、lambda等语法糖在字节码层面的实现原理,帮助开发者建立字节码阅读能力,解决跨版本兼容性问题。

davidwang456的专栏 503

基本题目(1)--remove

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33770878的博客 145

PySpark UDF性能陷阱与Pandas UDF优化实战指南

PySpark UDF(用户自定义函数)是数据工程师在Spark中复用Python逻辑的核心机制,但其底层涉及JVM与Python进程间频繁序列化、跨进程通信及类型映射,极易引发性能瓶颈与空值异常。理解UDF执行原理——尤其是标准UDF的‘行级搬运’开销与Pandas UDF依托Apache Arrow实现的‘批次零拷贝’优势——是规避CPU利用率低下、作业超时、NullPointerException等生产事故的关键。技术价值在于通过向量化计算、合理选择Scalar/GroupedMap/GroupedA

weixin_34293059的博客 465
上一篇: Python工程师Java之路(a)入门语法速查
下一篇: Python工程师Java之路(n)手写中文分词
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值