• [技术干货] 开源项目分享之Flea框架(flea-framework)
    Flea FrameworkFlea框架,取名跳蚤,源于作者Huazie的跳蚤市场项目,第一版代码更是从中而来。另外提到跳蚤,自然想到它的小个头和无处不在的特点,这也是Flea框架一直努力的目标,成为一款小巧易用的Java应用基础开发框架。项目地址: GitHub , GitCode介绍模块              名称描述flea-algorithmFlea 通用算法包各类算法的Java实现(持续扩充中)  flea-authFlea 授权操作包授权四子模块,包含用户、角色、权限 和 功能flea-framework-bomFlea 框架依赖清单可以使用该依赖以pom方式导入Flea框架依赖flea-cacheFlea 缓存处理包整合各类缓存接入,支持MemCached、Redis flea-commonFlea 通用工具包国际化、日志、通用对象池、通用策略、通用动态代理、JSON和XML通用处理等各式工具类flea-configFlea 配置包Flea框架各模块使用的配置,尽在flea目录中; 另外也包含JPA配置、Spring配置等flea-coreFlea 核心逻辑包flea-config配置库、Flea请求处理flea-dbFlea 数据持久包分库分表的JPA实现【基于EclipseLink】、原生JDBC通用实现flea-jerseyFlea Jersey 接口Flea Jersey 三子模块,分别是客户端、服务端 和 通用处理flea-jobFlea 调度处理包敬请期待。。。flea-msgFlea 消息处理包敬请期待。。。flea-toolsFlea 图形工具Unicode转换工具、JPA代码生成器 文档flea-authcid:link_2flea-cachecid:link_3flea-commoncid:link_1flea-dbcid:link_4flea-jerseycid:link_5flea-msghttps://blog.csdn.net/u012855229/category_12200260.html
  • [热门活动] 【数据库专题直播有奖提问】DTSE Tech Talk 技术直播 NO.36:看直播提问题赢华为云定制飞盘、华为云定制长袖卫衣等好礼!
    中奖结果公示感谢各位小伙伴参与本次活动,本次活动获奖名单如下:请各位获奖的伙伴在7月25日之前点击此处填写收货地址,如逾期未填写视为弃奖。再次感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~直播简介【直播主题】揭秘openGemini时序数据库应用场景与技术实践【直播时间】2023年7月19日 16:30-18:00【直播专家】向宇 华为云开源DTSE技术布道师;openGemini社区发起人【直播简介】本期直播由向宇详细讲解华为云开源的openGemini高性能、分布式时序数据库,将围绕场景、案例、架构、功能、性能、开发、成本等方面,帮助开发者更容易、更清晰的了解openGemini是什么,要解决什么问题,提供哪些能力,差异化竞争力是什么,性能如何,如何使用(安装部署、应用开发等)以及如何运维等一系列问题。直播链接:cid:link_2活动介绍【互动方式】直播前您可以在本帖留下您疑惑的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行评选。【活动时间】即日起—2023年7月20日【奖励说明】评奖规则:活动1:直播期间在直播间提出与直播内容相关的问题,对专家评选为优质问题的开发者进行奖励。奖品:华为云定制长袖卫衣活动2:在本帖提出与直播内容相关的问题,由专家在所有互动贴中选出最优问题贴的开发者进行奖励。奖品:华为云定制飞盘更多直播活动直播互动有礼:官网直播间发口令“华为云 DTSE”抽华为云云宝公仔、填写问卷抽华为云定制鼠标垫等好礼;直播过程中提问,评选优质问题送华为云定制长袖卫衣。分享问卷有礼 :邀请5位朋友以上完成问卷即可获得华为云定制棒球帽。戳我填问卷》》老观众专属福利:连续报名并观看DTT直播3期以上抽送华为云DTT定制T恤。【注意事项】1、所有参与活动的问题,如发现为复用他人内容,则取消获奖资格。2、为保证您顺利领取活动奖品,请您在活动公示奖项后2个工作日内私信提前填写奖品收货信息,如您没有填写,视为自动放弃奖励。3、活动奖项公示时间截止2023年7月21日,如未反馈邮寄信息视为弃奖。本次活动奖品将于奖项公示后30个工作日内统一发出,请您耐心等待。4、活动期间同类子活动每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一位合格开发者,仅一次顺延。5、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。6、其他事宜请参考【华为云社区常规活动规则】。
  • [公告] 【获奖公示】6.21号直播 / DTSE Tech Talk丨NO.33:解决开发者“兼容”难题,OpenTiny技术探索与应用解读
    中奖结果公示感谢各位小伙伴参与本次活动,本次活动论坛提问获得者:其他奖项获得者:华为云账号 奖项名称 奖品名称备注xj120141121 优质提问 无线鼠标hw081993541 优质提问 无线鼠标/ 官网抽奖 开发者定制礼盒1(笔记本套装,含钢笔和笔记本)/ 官网抽奖 开发者定制礼盒1(笔记本套装,含钢笔和笔记本)hid_a0211e-bd-x__sw 官网抽奖 开发者定制礼盒1(笔记本套装,含钢笔和笔记本)A18D07BA7E8E481DB625DD9346352097 官网抽奖 HDC开发者定制长袖圆领卫衣被判定为黑产/ 官网抽奖 HDC开发者定制长袖圆领卫衣 nukinsan 问卷抽奖 HDC开发者定制长袖圆领卫衣 yequanrui 问卷抽奖 HDC开发者定制长袖圆领卫衣 csdn_zeke 连续三期报名转发 DTT定制T恤 注:论坛优质提问与官网优质提问为同一类型子活动,不可同时获得,发放奖品会优先官网优质提问的奖品发放,请知悉。
  • [技术干货] java面试题基础篇 温故而知新 没事在地铁上多看看
    答案在路上,自由在风里,风吹哪页读哪页,哪页不懂撕哪页就是你,你太棒啦今天也要开开心心呀Java语言有哪些特点Java是一种高级编程语言,具有以下特点:面向对象:Java是一种纯面向对象的语言,所有代码都必须定义在类中。这使得Java非常适合开发大型应用程序和企业级软件。可移植性:Java的跨平台特性使其可以在不同的操作系统上运行,例如Windows、Linux和Mac OS等。简单易学:Java的语法相对简单,易于学习和使用。它还提供了大量的文档和教程,使初学者能够快速入门。高性能:Java的虚拟机(JVM)可以动态地将Java字节码翻译为本地机器代码,从而提高了程序的性能。安全性:Java提供了强大的安全功能,例如沙箱环境和安全管理器,可以帮助保护应用程序免受恶意代码的攻击。大量的类库:Java拥有丰富的类库,涵盖了各种领域,例如网络编程、图形用户界面、数据库访问等。开放源代码:Java是开源的,任何人都可以查看和修改其源代码,这使得Java社区可以不断改进和扩展其功能。面向对象和面向过程的区别面向对象(Object-Oriented,简称 OO)和面向过程(Procedural,简称 PO)是两种不同的编程范式。它们的主要区别在于关注点、设计原则和代码组织方式。以下是面向对象和面向过程之间的一些主要区别:关注点:面向对象编程关注数据和行为之间的关系,强调封装、继承和多态性。面向过程编程关注解决问题的方法,强调输入、处理和输出。设计原则:面向对象编程的设计原则包括封装、继承和多态性。封装确保数据和方法在类内部隐藏,外部无法直接访问;继承允许子类从父类继承属性和方法;多态性允许不同类的对象对同一消息作出不同的响应。面向过程编程的设计原则包括模块化、结构化和自顶向下的分解。模块化使得程序更容易理解和维护;结构化编程有助于提高代码的可读性和可维护性;自顶向下的分解将问题分解为更小的、易于管理的部分。代码组织方式:面向对象编程通常使用类和对象来表示实体和关系,通过调用方法实现功能。这种方式使得代码更加模块化、可重用和易于维护。面向过程编程通常使用函数和过程来表示任务,通过调用函数实现功能。这种方式使得代码更加结构化、易于理解和调试。面向对象编程和面向过程编程的主要区别在于关注点、设计原则和代码组织方式。面向对象编程强调数据和行为之间的关系,以及封装、继承和多态性等设计原则;而面向过程编程关注解决问题的方法,以及模块化、结构化和自顶向下的分解等设计原则。在实际开发中,选择合适的编程范式取决于项目需求、团队技能和其他因素八种基本数据类型的大小,以及他们的封装类Java八种基本数据类型的大小如下:byte:8位,取值范围为-128~127short:16位,取值范围为-32768~32767int:32位,取值范围为-2^31~2^31-1long:64位,取值范围为-2^63~2^63-1float:32位,取值范围为1.4E-45~3.4028235E+38double:64位,取值范围为4.9E-324~1.7976931348623157E+308char:16位,Unicode编码,一个字符占用两个字节,取值范围为'\u0000'~'\uffff'Java中对应八种基本数据类型的封装类分别为:Byte:java.lang.ByteShort:java.lang.ShortInteger:java.lang.IntegerLong:java.lang.LongFloat:java.lang.FloatDouble:java.lang.DoubleCharacter:java.lang.CharacterString:java.lang.String// 使用byte类型存储整数 byte b = 10; // b的值为10,占用一个字节(8位) System.out.println("b的值为" + b); // 输出结果为b的值为10 // 使用short类型存储整数 short s = 10; // s的值为10,占用两个字节(16位) System.out.println("s的值为" + s); // 输出结果为s的值为10 // 使用int类型存储整数 int i = 10; // i的值为10,占用四个字节(32位) System.out.println("i的值为" + i); // 输出结果为i的值为10 // 使用long类型存储整数 long l = 10L; // l的值为10,占用八个字节(64位) System.out.println("l的值为" + l); // 输出结果为l的值为10 // 使用float类型存储浮点数 float f = 10F; // f的值为10,占用四个字节(32位),其中小数部分占用了三个字节(24位) System.out.println("f的值为" + f); // 输出结果为f的值为10.000000 // 使用double类型存储浮点数 double d = 10D; // d的值为10,占用八个字节(64位),其中小数部分占用了七个字节(56位) System.out.println("d的值为" + d); // 输出结果为d的值为10.0000000000000000000000000000000000000000000000000​标识符的命名规则Java标识符的命名规则如下:标识符由字母、数字和下划线组成,但是必须以字母或下划线开头。Java中的关键字不能作为标识符的一部分,包括public、private、protected、static、interface、abstract、final、volatile、transient等关键字。标识符只能在类、接口、方法和变量中使用。Java中的保留字(如if、else、for、while等)也不能作为标识符的一部分。public class MyClass { private int myInt; // 整型变量myInt的命名符合Java标识符的命名规则 private String myString = "Hello World"; // 字符串变量myString的命名符合Java标识符的命名规则 public void myMethod() { double myDouble = 3.14; // 双精度浮点型变量myDouble的命名符合Java标识符的命名规则 } }​instanceof 关键字的作用instanceof 是 Java 中的一种关键字,用于检查一个对象是否是某个特定类(或其子类)的实例。它通常与 new 操作符一起使用,以创建一个新对象并检查其类型。public class Animal { public void makeSound() { System.out.println("Animal is making a sound."); } } public class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog is barking."); } } public class Main { public static void main(String[] args) { Animal animal = new Dog(); // 创建一个狗对象 if (animal instanceof Dog) { // 检查动物对象是否是狗的实例 System.out.println("The animal is a dog."); } else if (animal instanceof Animal) { // 检查动物对象是否是任何动物的实例(包括狗和猫等) System.out.println("The animal is an animal."); } else { // 如果不是狗或任何动物的实例,则输出错误信息 System.out.println("The animal is neither a dog nor an animal."); } } }​Java自动装箱与拆箱Java自动装箱与拆箱是Java语言中的一个重要特性,它允许程序员在不需要显式声明类型的情况下将基本数据类型转换为对象类型。以下是Java自动装箱与拆箱的示例代码: 自动装箱 int a = 5; Integer b = a; // 将int类型的a自动装箱成Integer类型 System.out.println(b); // 输出结果为5 自动拆箱 Integer c = new Integer(5); int d = c; // 将Integer类型c自动拆箱成int类型 System.out.println(d); // 输出结果为5 抛出异常 int e = 0; try { int f = (int) "0"; // 将字符串"0"强制转换为int类型,会抛出NumberFormatException异常 } catch (NumberFormatException ex) { System.out.println(ex.getMessage()); // 输出结果为"Value is not a number" } 最大值和最小值检查 int g = Integer.MAX_VALUE; if (g == 10) { System.out.println("g is equal to 10"); // 输出结果为"g is equal to 10" } else { System.out.println("g is not equal to 10"); // 输出结果为"g is not equal to 10"​重载和重写的区别Java中的方法重载(Overloading)和方法重写(Overriding)是面向对象编程中的两个重要概念,它们在功能上有所区别。重载(Overloading): 重载是指在一个类中,方法名相同但参数列表不同的多个方法。编译器根据传递给方法的参数类型和数量来决定调用哪个方法。例如:public class MyClass { public void method(int a, int b) { System.out.println("Method with two integers: " + a + b); } public void method(String str) { System.out.println("Method with a string: " + str); } }​在这个例子中,我们定义了两个名为method的方法,它们具有相同的名称,但参数列表不同。当我们使用这两个方法时,编译器会根据传递给它的参数类型和数量自动选择合适的方法。重写(Overriding): 重写是指子类重新定义与父类同名、同参数列表和返回类型的方法。当子类重写一个父类的方法时,子类的方法将覆盖父类的方法。class Animal { public void eat() { System.out.println("Animal is eating"); } } class Dog extends Animal { @Override public void eat() { System.out.println("Dog is eating"); } } ​在这个例子中,我们定义了一个名为eat的方法,它是一个抽象方法,表示动物吃东西的行为。然后我们创建了一个名为Dog的子类,并重写了eat方法。当我们创建一个Dog对象并调用eat方法时,输出结果将是"Dog is eating",而不是"Animal is eating"。这是因为子类重写了父类的方法​​equals与==的区别Java中的equals()和==都是用于比较两个对象是否相等的方法,但它们之间有一些细微的差别。equals()方法是Object类中的方法,而==运算符是基本类型(如int、float等)的方法。因此,如果要比较一个自定义对象与另一个自定义对象,应该使用equals()方法而不是==运算符。equals()方法比较的是两个对象的内容是否相等,包括数据类型和值。而==运算符比较的是两个对象的引用是否相等,即它们是否指向同一个内存地址。​public class Person { private String name; private int age; // 构造函数 public Person(String name, int age) { this.name = name; this.age = age; } // equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } // toString方法 @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }在上面的代码中,我们定义了一个Person类,它有两个属性:name和age。我们在类中重写了equals()方法和toString()方法。在equals()方法中,我们首先判断两个对象是否为同一个对象,如果是则返回true,否则通过getClass()方法获取两个对象的类类型并进行比较,最后再比较两个对象的属性值是否相等。在toString()方法中,我们只是简单地将属性值拼接成字符串输出。Hashcode的作用Hashcode是Java中用于比较两个对象是否相等的方法。它的作用是返回一个整数,表示当前对象的哈希码值。如果两个对象的哈希码值相同,则说明它们在内存中的地址相同,即相等。public class HashCodeExample { public static void main(String[] args) { String str1 = "Hello"; String str2 = "World"; int hash1 = str1.hashCode(); // 计算str1的哈希码值 int hash2 = str2.hashCode(); // 计算str2的哈希码值 System.out.println("str1的哈希码值为:" + hash1); System.out.println("str2的哈希码值为:" + hash2); if (hash1 == hash2) { // 判断两个字符串的哈希码值是否相等 System.out.println("str1和str2相等"); } else { System.out.println("str1和str2不相等"); } } } str1的哈希码值为:504839640 str2的哈希码值为:720774163 str1和str2不相等​​String、String StringBuffffer 和 StringBuilder 的区别是什么?Java中的String、StringBuffer和StringBuilder都是用于处理字符串的类,但它们之间存在一些关键区别。以下是关于这三个类的详细说明:String:String类是Java中最常用的字符串类,它表示一个不可变(immutable)的字符序列。当你创建一个String对象时,Java会在堆内存中分配一块连续的空间来存储这个字符串。这意味着一旦你创建了一个String对象,你就无法更改其内容。String str1 = "Hello, world!"; System.out.println(str1); // 输出: Hello, world!​StringBuffer:StringBuffer类是一个可变的字符串缓冲区,允许你在运行时修改字符串。当你创建一个StringBuffer对象时,Java会分配一块动态增长的内存空间来存储这个字符串。这意味着你可以在程序运行过程中随时修改字符串的内容。StringBuffer strBuffer = new StringBuffer("Hello, Java!"); strBuffer.append(", World!"); // 修改字符串内容 System.out.println(strBuffer); // 输出: Hello, Java!, World!StringBuilder:StringBuilder类也是一个可变的字符串缓冲区,但它的行为与StringBuffer类似,但性能更好。当你创建一个StringBuilder对象时,Java同样会分配一块动态增长的内存空间来存储这个字符串。然而,由于它的内部实现方式不同,它在修改字符串时的速度通常比StringBuffer快。StringBuilder stringBuilder = new StringBuilder("Hello, Java!"); stringBuilder.append(", World!"); // 修改字符串内容 System.out.println(stringBuilder); // 输出: Hello, Java!, World!如果你需要在程序运行过程中频繁地修改字符串,那么使用StringBuilder或StringBuffer可能更合适。而如果你只需要创建一个不可变的字符串常量,那么使用String就足够了。​​ArrayList和linkedList的区别ArrayList和LinkedList都是Java中常用的集合类,它们的主要区别在于内部实现和性能。内部实现:ArrayList是基于数组(Array)实现的,而LinkedList是基于链表(Linked List)实现的。因此,对于对元素的随机访问,ArrayList比LinkedList更快;而对于插入、删除操作,LinkedList比ArrayList更高效。性能:由于ArrayList是基于数组实现的,它在随机访问方面表现非常优秀,但是在插入、删除元素时需要移动后面的元素,所以时间复杂度为O(n),其中n为元素数量。而LinkedList是基于链表实现的,插入、删除元素的时间复杂度为O(1),但是随机访问元素需要遍历整个链表,所以时间复杂度为O(n)。import java.util.ArrayList; import java.util.LinkedList; import java.util.Random; public class ArrayListExample { public static void main(String[] args) { // 创建ArrayList对象 ArrayList<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); list1.add(4); list1.add(5); System.out.println("ArrayList: " + list1); // 创建LinkedList对象 LinkedList<Integer> list2 = new LinkedList<>(); list2.add(1); list2.add(2); list2.add(3); list2.add(4); list2.add(5); System.out.println("LinkedList: " + list2); // 添加元素到ArrayList中 Random random = new Random(); for (int i = 0; i < 10; i++) { int num = random.nextInt(10); if (list1.contains(num)) { continue; } else { list1.add(num); } } System.out.println("ArrayList: " + list1); // 添加元素到LinkedList中 for (int i = 0; i < 10; i++) { int num = random.nextInt(10); if (list2.contains(num)) { continue; } else { list2.add(num); } } System.out.println("LinkedList: " + list2); } }HashMap和HashTable的区别Java中的HashMap和HashTable都是用于存储键值对的数据结构,但它们之间有一些重要的区别。线程安全性:HashTable是线程安全的,而HashMap是非线程安全的。这意味着在多线程环境下使用HashMap时需要进行同步处理,否则可能会出现数据不一致的情况。性能:HashMap通常比HashTable更快,因为HashMap内部使用哈希表来实现,而HashTable则是基于数组实现的。Null值:HashMap允许Key和Value为null,而HashTable不允许。初始容量和增长因子:HashMap有固定的初始容量和增长因子,而HashTable没有。HashMap的初始容量为16,增长因子为0.75;而HashTable的初始容量为11,增长因子为0.75。​import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class MapExample { public static void main(String[] args) { // 创建HashMap对象 HashMap<Integer, String> map1 = new HashMap<>(); map1.put(1, "one"); map1.put(2, "two"); map1.put(3, "three"); System.out.println("HashMap: " + map1); // 创建HashTable对象 HashSet<Integer> set1 = new HashSet<>(); set1.add(1); set1.add(2); set1.add(3); System.out.println("HashTable: " + set1); } }​Collection包结构,与Collections的区别Java Collection包是Java集合框架的核心,它提供了一组接口和类来处理集合。Java Collection包结构包括以下几个部分:接口Java Collection包中定义了许多接口,例如List、Set、Map等。这些接口定义了集合的基本操作,例如添加元素、删除元素、查找元素等。类Java Collection包中定义了许多类,用于实现各种接口。例如,ArrayList类实现了List接口,LinkedList类实现了List接口并保持元素的插入顺序,HashMap类实现了Map接口,TreeMap类实现了Map接口并按照自然排序或自定义排序方式对键进行排序等。静态方法Java Collection包中还定义了一些静态方法,用于创建新的集合对象或对现有集合进行操作。例如,Collections.singletonList()方法可以创建一个只包含一个元素的List集合,Collections.emptyList()方法可以创建一个空的List集合,Collections.unmodifiableList(List list)方法可以将一个List集合转换为不可修改的集合等。import java.util.ArrayList; import java.util.List; public class Example { public static void main(String[] args) { // 创建一个List集合对象 List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("orange"); // 输出List集合中的元素数量 System.out.println("List集合中的元素数量:" + list.size()); // 将List集合转换为字符串并输出 System.out.println("List集合转换为字符串:" + list); } }java 的四种引用,强软弱虚Java中四种引用是:Strong Reference(强引用):是指在程序中直接使用一个对象时所使用的引用,如果该对象没有其他强引用指向它,那么它会被垃圾回收器回收。Soft Reference(软引用):是指在程序中使用一个弱引用来引用一个对象,只有在内存不足时才会被回收。Weak Reference(弱引用):是指在程序中使用一个虚引用来引用一个对象,只要任何地方有一个强引用指向它,它就不会被回收。Final Reference(最终引用):是指在程序中使用一个永久引用来引用一个对象,无论何时何地,只要存在这个引用,对象就不会被回收。// 创建一个对象并使用Strong Reference引用它 Object obj = new Object(); ReferenceType objRef = new ReferenceType(obj); System.out.println("obj的值为:" + obj.toString()); System.out.println("objRef的值为:" + objRef.get()); // 将objRef设置为null,表示不再使用Strong Reference引用它 objRef = null; System.gc(); // 执行一次垃圾回收 System.out.println("obj的值为:" + obj.toString());​泛型常用特点Java泛型是Java编程语言的一个重要特性,它允许程序员在编译时为数据类型指定通用类型参数。以下是Java泛型的一些常用特点:类型安全:泛型可以确保在运行时不会发生类型不匹配的问题,从而提高程序的稳定性和安全性。代码重用:通过使用泛型,程序员可以将相同的代码用于不同类型的数据结构,从而提高代码的复用性。类型擦除:Java泛型实现了类型擦除,这意味着在运行时,实际使用的是原始类型,而不是泛型类型。这有助于减少内存开销,提高性能。public class GenericClass<T> { private T value; public void setValue(T value) { this.value = value; } public T getValue() { return value; } } public class Main { public static void main(String[] args) { GenericClass<Integer> integerClass = new GenericClass<>(); integerClass.setValue(10); System.out.println("Value of integerClass: " + integerClass.getValue()); // Output: Value of integerClass: 10 GenericClass<String> stringClass = new GenericClass<>(); stringClass.setValue("Hello, World!"); System.out.println("Value of stringClass: " + stringClass.getValue()); // Output: Value of stringClass: Hello, World! } } 我们定义了一个名为GenericClass的类,它具有一个泛型类型参数T。然后我们创建了两个不同的GenericClass实例:integerClass和stringClass,它们分别使用了整数和字符串作为泛型类型参数Java创建对象有三种方式:使用new关键字创建对象 java复制代码Person person = new Person("张三", 20);使用反射机制创建对象 java复制代码Class<?> clazz = Class.forName("com.example.Person"); Object obj = clazz.newInstance();使用工厂模式创建对象 java复制代码// 定义一个工厂类,用于创建Person对象 public class PersonFactory { public static Person createPerson(String name, int age) { Person person = new Person(name, age); return person; } } // 在其他地方调用工厂类创建Person对象 Person person = PersonFactory.createPerson("张三", 20);​有没有可能两个不相等的对象有相同的hashcode在Java中,如果两个对象的hashCode()方法没有正确实现,那么它们可能会有相同的hashCode值。这是因为hashCode()方法的目的是生成一个整数,用于标识对象在哈希表中的位置,而哈希表使用的是散列算法(如MD5或SHA-1),这些算法并不要求不同的对象具有不同的哈希码值。 java复制代码 public class UnequalHashCodeExample { public static void main(String[] args) { String str1 = "Hello"; String str2 = "World"; int hashCode1 = str1.hashCode(); int hashCode2 = str2.hashCode(); System.out.println("str1 hash code: " + hashCode1); System.out.println("str2 hash code: " + hashCode2); if (hashCode1 == hashCode2) { System.out.println("The two strings have the same hash code!"); } else { System.out.println("The two strings do not have the same hash code!"); } } }在这个例子中,我们创建了两个字符串对象:str1和str2,它们的内容分别为"Hello"和"World"。然后,我们分别调用它们的hashCode()方法并打印结果。由于这两个字符串的内容不同,我们期望它们的哈希码也不同。然而,当我们运行这段代码时,我们会发现它们确实具有相同的哈希码值(输出结果为:"The two strings have the same hash code!"),这说明在某些情况下,两个不相等的对象确实可能具有相同的哈希码。深拷贝和浅拷贝的区别是什么?Java中的深拷贝和浅拷贝都是对象复制的方式,它们的区别在于是否对原始对象及其引用类型进行递归复制。浅拷贝(Shallow Copy): 浅拷贝只复制对象本身及其基本类型属性(如int、float等),而不复制引用类型属性(如String、List等)所指向的对象。换句话说,浅拷贝会创建一个新的对象,但是新对象的引用类型属性仍然指向原始对象。这意味着在原始对象中修改引用类型属性时,新对象的引用类型属性也会受到影响。 public class ShallowCopyExample { public static void main(String[] args) { List<Integer> originalList = new ArrayList<>(Arrays.asList(1, 2, 3)); List<Integer> shallowCopyList = new ArrayList<>(originalList); // 浅拷贝 originalList.add(4); // 在原始列表中添加元素4 System.out.println("Original list: " + originalList); // [1, 2, 3, 4] System.out.println("Shallow copy list: " + shallowCopyList); // [1, 2, 3, 4] } }深拷贝(Deep Copy): 深拷贝会递归地复制原始对象及其引用类型属性所指向的对象。这意味着在原始对象中修改引用类型属性时,新对象的引用类型属性不会受到影响。​import java.util.ArrayList; import java.util.List; public class DeepCopyExample { public static void main(String[] args) { List<Integer> originalList = new ArrayList<>(Arrays.asList(1, 2, 3)); List<Integer> deepCopyList = new ArrayList<>(originalList); // 深拷贝 originalList.add(4); // 在原始列表中添加元素4 System.out.println("Original list: " + originalList); // [1, 2, 3, 4] System.out.println("Deep copy list: " + deepCopyList); // [1, 2, 3, 4] } }​
  • [互动交流] 【Euler21.10+ARM】欧拉系统的鲲鹏服务器怎么安装kvm去拉虚机?
    【Euler21.10+ARM】欧拉系统的鲲鹏服务器怎么安装kvm去拉虚机?
  • 为什么同一组件在preview上可以显示,但是在方舟编译器的模拟器上就无法显示?
    为什么同一组件在preview上可以显示,但是在方舟编译器的模拟器上就无法显示?
  • [热门活动] 【提问有奖】DTSE Tech Talk 技术直播 NO.29专家坐堂答疑:看直播提问题赢华为云定制无线鼠标、华为云定制Polo衫等好礼!
    直播简介【直播时间】2023年5月24日 16:30-18:00【直播专家】巩超 hertzbeat & tancloud 创始人【直播简介】什么是HertzBeat ?一款指标监控工具是否和自带agent强相关?HertzBeat有哪些能力特性?与现有采集协议做了什么整合?HertzBeat开源发展历程是怎么样的?如何与华为云适配对接?HertzBeat & TanCloud创始人巩超为你揭秘开源实时监控工具HertzBeat背后的原理。直播链接:cid:link_1活动介绍【互动方式】直播前您可以在本帖留下您疑惑的问题,专家会在直播时为您解答。直播后您可以继续在本帖留言,与专家互动交流。我们会在全部活动结束后对参与互动的用户进行评选。【活动时间】即日起—2023年5月25日【奖励说明】评奖规则:活动1:直播期间在直播间提出与直播内容相关的问题,对专家评选为优质问题的开发者进行奖励。奖品:华为云定制无线鼠标活动2:在本帖提出与直播内容相关的问题,由专家在所有互动贴中选出2名最优问题贴的开发者进行奖励。奖品:华为云定制Polo衫更多直播活动直播互动有礼:官网直播间发口令“华为云 DTSE”抽华为云云宝公仔、填写问卷抽华为云定制双肩包等好礼。分享问卷有礼 :邀请5位朋友以上完成问卷即可获得华为云开发者定制T恤。戳我填问卷》》老观众专属福利:连续报名并观看DTT直播3期以上抽送华为云DTT定制T恤。【注意事项】1、所有参与活动的问题,如发现为复用他人内容,则取消获奖资格。2、为保证您顺利领取活动奖品,请您在活动公示奖项后2个工作日内私信提前填写奖品收货信息,如您没有填写,视为自动放弃奖励。3、活动奖项公示时间截止2023年5月25日,如未反馈邮寄信息视为弃奖。本次活动奖品将于奖项公示后30个工作日内统一发出,请您耐心等待。4、活动期间同类子活动每个ID(同一姓名/电话/收货地址)只能获奖一次,若重复则中奖资格顺延至下一位合格开发者,仅一次顺延。5、如活动奖品出现没有库存的情况,华为云工作人员将会替换等价值的奖品,获奖者不同意此规则视为放弃奖品。6、其他事宜请参考【华为云社区常规活动规则】。
  • 求大佬帮忙看看 此包名 com.hysteria.leaf 属于哪方SDK 如何解决啊
    求告知 谢谢大佬们了
  • [技术干货] FAQ—DevCloud论坛(问题求助)总结-1至12月
    首次使用华为云DevCloud时,开发者们总会遇到一些问题,小编针对大家遇到的问题做了分类总结,比如标准页面的表格数据问题、标准页面的表格数据问题、如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?、标准页面的表格数据问题。憋着急!下面小编就来为大家一一解答遇到这几类问题时该如何快速解决,一步解决大家的困扰。 华为云DevCloud系列产品参考手册:1:软件开发平台(DevCloud)官方手册:https://support.huaweicloud.com/devcloud/index.html软件开发平台(DevCloud)相关文章:https://bbs.huaweicloud.com/forum/thread-59032-1-1.html产品官方页面:https://devcloud.cn-north-4.huaweicloud.com/home2:项目管理(ProjectMan)官方手册:https://support.huaweicloud.com/projectman/index.html项目管理(ProjectMan)更新预览:https://support.huaweicloud.com/wtsnew-projectman/index.html产品官方页面:https://www.huaweicloud.com/product/projectman.html3:appcube应用魔方官方手册:https://support.huaweicloud.com/qs-appcube/appcube_02_0110.htmlappcube操作指导:https://support.huaweicloud.com/appcube_video/index.htmlappcube0元体验官方贴:https://bbs.huaweicloud.com/forum/thread-160880-1-1.html产品官方页面:https://appcube.cn-north-4.huaweicloud.com/studio/index.html#/projects/appcube零代码官方手册:https://support.huaweicloud.com/usermanual-appcube/appcube_05_1404.html问题汇总:(以上问题都是由官方人员解答后的文章链接)应用魔方:Q:如何发布单个模型和页面?A:点击项目左下角【编译】下方的【设置】,选中【源码包】, 点击【详情】后,选择自己要发布的【模型】或者【页面】,发布即可。Q:用户登录接口的验证码字段是否可以去掉?A:登录验证码校验,是用户主动在【登录FLOW】中调用【VERIFY 图元】校验的,只要在FLOW中去掉这个图元就不校验了。登录功能详情介绍见链接。cid:link_0Q:如何删除BPM流程产生的审批流数据?A:可选择【终止BPM】实例操作。BPM详情见链接。挂起/恢复/终止BPM实例_应用魔方 AppCube_API参考_API_BPM_华为云 (huaweicloud.com)Q:AppCube上有没有代码库管理机制?A:目前没有代码管理,只有源码包。源码包相关介绍与操作详情见链接。导入导出应用源码包_应用魔方 AppCube_用户指南_低代码应用开发指导_工程能力_华为云 (huaweicloud.com)Q:cas登录自动创建的用户,页面label标签丢失?A:可能是页面语言引起的不兼容,创建出来的用户默认是英文(修改默认的地方在国际化->翻译工作台),需要修改成中文。把默认语言改成中文,或者在已经创建出来的业务用户语言改成中文后,页面恢复正常。Q:如何在BPM里直接配置业务用户?A:参与者类型选择表达式,表格式的结果只要是合法的字符串就可以,合法字符串包括: “puser:abc","puser:def,user:myUser,group:group1,role:role1",或者“10gd000000GdNnklwyvY,10gd000000Fk2bgHMGxM" id用逗号分隔Q:表格里的筛选是否可以全局操作?A:目前不支持,若需要可以提需求评审,做一个当前页/全局的选项Q:同步过来的部门是否可以批量删除?A:可以删除角色,部门就是我们平台的角色,业务用户暂时不支持批量删除;可以写sql删除Q:如何能把大量重复的代码抽成公共的方法?A:问题详情:方法run().then( xxx ) then里面写了一堆代码吗,如果一个页面上有好几处地方调用了这个模型的run方法,每次都要复制这么一大堆代码,解决方案:如果您希望使用第三方库文件,而当前系统中不存在该库,您可以通过上传,新增该JS/CSS库,并在页面中设计并使用该库,实现引入第三方库的功能。 标准页面 - 获取下拉框选项的value:https://bbs.huaweicloud.com/forum/thread-176551-1-1.html标准页面的表格数据问题:https://bbs.huaweicloud.com/forum/thread-176322-1-1.html标准页面中单选选择默认值为什么不显示 还有日期选择器可以选择默认么:https://bbs.huaweicloud.com/forum/thread-174618-1-1.html如何在标准页面的事件里面通过JS代码,获得下拉框选择的值?:https://bbs.huaweicloud.com/forum/thread-174528-1-1.html如何实现通过下拉框选择,自动将选择的数据赋值给同一个页面的文本框,作为初始化数据?:https://bbs.huaweicloud.com/forum/thread-173494-1-1.htmlAppCube发布微信小程序步骤中校验文件放入根目录下:https://bbs.huaweicloud.com/forum/thread-171831-1-1.html标准页面里面组件的事件,如何调试JS?:https://bbs.huaweicloud.com/forum/thread-173484-1-1.html下拉框:不通过“选项列表”功能,如何实现标准页面的下拉框从后台动态获取数据?:https://bbs.huaweicloud.com/forum/thread-173415-1-1.htmlappcube上传的图片在查看中怎么显示出来:https://bbs.huaweicloud.com/forum.php?mod=viewthread&tid=173294&page=0&authorid=&replytype=&extra=#pid1392704【用户权限】appcube权限体系是什么样的?:cid:link_32【APPcube】产品】【对象功能】字段大小写敏感:cid:link_33【AppCube】【REST功能】请求OBS桶资源时401报错cid:link_34标准页面-获得模型值的问题cid:link_35如何通过自定义JS代码的形式动态控制“开关”的“只读”属性cid:link_36标准页面-基本组件默认样式,如阴影,如何全局自定义?cid:link_37标准页面-基本组件-列表视图,点击某一条数据,怎么知道当前点击的是哪条数据?cid:link_38请问代码库配置是针对整个开发环境生效吗?仓库地址设置后能修改吗?cid:link_39标准页面-组件-选项树,动态设置某条数据的状态?cid:link_40AppCube 中 VueRouter 怎么使用cid:link_41高级页面中-事件和动作怎么理解?cid:link_42表单中插入列表视图,列表中插入输入框,动态绑定label 不显示?cid:link_43【AppCube应用开发】预置库中的element组件库如何引用?cid:link_44如何自定义全局样式?cid:link_45高级页面-流式布局-悬浮模式下,layout定位怎么理解?cid:link_46高级页面-流式布局,预置组件,悬浮模式下Widget定位报错!!!cid:link_47标准页面发布的高级组件采用Widget定位后,报错!!!cid:link_48高级页面中怎么实现类似标准页面基本组件的功能?cid:link_49如何实现一个入口页面,进入多个子项目系统?cid:link_50标准页面-基本组件-列表视图,点击某一条数据,怎么知道当前点击的是哪条数据?cid:link_38标准页面-基本组件默认样式,如阴影,如何全局自定义?cid:link_37标准页面中如何封装echarts组件cid:link_51【Appcube】【脚本】如何下载图片(图片链接为第三方链接,非OBS)cid:link_52【Appcube】如何实现下载给定链接的图片到OBScid:link_53【Appcube】【rest服务】调用rest服务的接口的时候如何查看实际请求的url和请求参数,返回参数,header等cid:link_54【Appcube】【rest服务】如何看到真实请求的完整url和参数cid:link_55【Appcube】【服务编排】中如何获取数组的长度cid:link_56请问有关于APPcube的性能等相关测试报告吗https://bbs.huaweicloud.com/forum/thread-0202101528185018077-1-1.html零代码cid:link_30请教一下,DevCloud 流水线如何自动部署CCI集群呢 https://bbs.huaweicloud.com/forum/thread-0229101215092971070-1-1.htmlAPPCUBE 与IOTDA 交互cid:link_57【APPCUBE】【退出登录】自定义退出功能cid:link_58BPM运行机制cid:link_59 AppCube提供的BPM引擎是用的Activiti吗cid:link_60 轻应用js-api 获取不到HWH5cid:link_61【AppCube】【高级页面内置表格组件】怎么实现数据联动?cid:link_62GIS地图厂商已上传,其中还包含各个楼层的图层 我会在页面加上几个按钮来切换当前显示哪一个图层。比如点中1楼就显示1楼的图层。cid:link_63【AppCube】【文件下载】后端接口返回文件流,使用连接器调用如何下载文件cid:link_64预览的时候文本1F为什么没显示cid:link_65【业务大屏】【数据显示】如何把IOTDA属性数据显示到业务大屏?cid:link_66 IOTDA属性数据如何显示到业务大屏上?cid:link_67【appcube标准页面】【库引入】库执行顺序混乱cid:link_68请问接口未开放是什么原因啊cid:link_69【appcube产品】【自定义连接器功能】认证信息中的鉴权信息cid:link_70【AppCube】【管理页面级数据源、全局状态】数据改变视图不更新cid:link_71[appcube] 如何实现同一系统中根据用户权限,动态展示页面及导航菜单cid:link_72【应用魔方产品】【按钮卡功能】点击按钮获取当前选中值cid:link_73【appcube产品】【设备维修管理系统开发】如何在地图上同时显示工程师和设备的位置cid:link_74Websocket 匿名用户监听事件cid:link_75appcube支持异步或者多线程吗?cid:link_76【AppCube产品】【菜单功能】如何获取配置的菜单树cid:link_77【AppCube】【菜单功能】如何实现tabs路由切换功能cid:link_78rome 模拟设备告警,换了新账号 报500错误cid:link_13【北明】【AppCube】【智慧园区】按照该文档进行配置,到此处会报错cid:link_14【北明】【诺亚】ioc用户权限怎么配置cid:link_15【北明】【诺亚】怎么获取IOC 登录之后的access-tokencid:link_16【北明】【AppCube】【智慧园区】智慧园区运营中心登录后,嵌入的页面,如何获取当前账户登录信息(电话:17564003932)cid:link_17【北明】【AppCube】【智慧园区】智慧园区运营中心,模块页面的层级是不是存在限制?cid:link_18API响应参数cid:link_19如何搭建AppCube本地沙箱环境?cid:link_20想了解下通过Python的Rquest,请求AppCube的一些请求的报错的解决方法cid:link_21每天耗费0.13元,这是什么费用?怎么解除这个? cid:link_22低代码开发模版支持SCRM 模版吗cid:link_23项目管理华为开源镜像站能否统计软件包的下载量cid:link_24@modern-js/codesmith@1.5.1 官方npm源有,但华为云拉不到https://bbs.huaweicloud.com/forum/thread-0283984990093960002-1-1.html导入数据,提示网络繁忙:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=148204&page=java 方式 obs 文件获取问题:https://bbs.huaweicloud.com/forum/thread-161442-1-1.html权限设置问题:https://bbs.huaweicloud.com/forum/thread-168597-1-1.html规划中的甘特图,选择task 编辑描述信息保存后,选择其他task 工作项视图 描述信息都是上一条的:cid:link_79filebeat镜像更新cid:link_80openEuler-22.03-LTS的repo源部分软件包无法使用cid:link_81登陆完之后无法自动跳转到登陆前页面cid:link_82jdk 镜像站长期没有更新,首页搜索不到cid:link_83华为技术文档中的MR是啥意思 有人知道么cid:link_84 MR啥意思?cid:link_85【软开云】新升级的功能就是画蛇添足,没事找事做cid:link_86【gitlab】希望增加gitlab的镜像源cid:link_87希望添加 min io 镜像cid:link_88【gitlab】希望增加gitlab的镜像源cid:link_87【开源镜像站】【yum更新模块】一直出现Operation timed outcid:link_89Maven源希望添加cid:link_25华为云CodeCheck服务可以发现哪些架构设计的问题?https://bbs.huaweicloud.com/forum/thread-193674-1-1.htmlpython pip源需要更新啦。。。https://bbs.huaweicloud.com/forum/thread-0295101369651526068-1-1.htmlMaven 依赖下载错误提示 500 https://bbs.huaweicloud.com/forum/thread-0202102052588804111-1-1.html会员中心:这个月的会员日活动啥时候公布呀https://bbs.huaweicloud.com/forum/thread-196413-1-1.htmlQ:小助手啊,豆子要过期了,所以换了一个鼠标,不过我们这里在封控,还不知道什么时候解封的确切时间,A:cid:link_90Q:已解决。手抖兑了一个鼠标垫,能退吗???A:https://bbs.huaweicloud.com/forum/thread-181628-1-1.html刚过期的码豆还能有办法补回来吗?cid:link_91 请问华为定制鼠标有使用说明书吗?上面这些按键也不知道怎么用的。cid:link_92 K8Scid:link_93云原生cid:link_94我5月26兑换的路由器为啥还没发货呢cid:link_954月份会员兑换的是还没发货吗?cid:link_96询问cid:link_97Cloudide:Python中无法用pip命令安装的三方包如何安装?cid:link_98会员cid:link_99小助手,我们这里的快递应该可以收了,我还有一个兑换的罗技鼠标还没收。cid:link_100最新更新:会员日取消了cid:link_2610月份兑换的商品没有收到快递信息cid:link_27公众号更新了,不过小助手我这里有个疑问cid:link_28有关专属任务的码豆 cid:link_10现在2022年的最后一个月了,有什么新活动吗cid:link_29安装bo包的时候报错 && 流程编排里出现了无法删除,无法编辑,也点不进去的流程cid:link_11appcube服务编排调用OBS连接器上传附件,上传图片表格等类型的文件需要怎样传参?cid:link_12零代码cid:link_30本帖内容会持续刷新维护和新增问答,如您有本类型问题或问题仍无法解决,欢迎留言交流!最新活动:【DevRun】成长计划—Serverless专场cid:link_2【DevRun】零代码开发体验季cid:link_3【DevRun】华为云AppCube学习赛——湖南机电职业技术学院站cid:link_4【HCSD】潜力测试:华为云数据库技能测评,你敢来挑战吗?cid:link_5【DevRun】软件开发流水线实战营cid:link_6【DevRun】低代码AI应用开发实战营cid:link_7【DevRun全栈成长计划】DevOps全栈实践训练营——六星教育专场cid:link_82022/12/3               眨眼马上过年啦 感谢各位开发者的支持 祝大家新年快乐  我们明年见
  • [互动交流] MRS 3.1.0普通集群怎么安装开源的flink组件
    MRS 3.1.0普通集群怎么安装开源的flink组件,求助各位大神
  • [技术干货] 【CSDN官方】开源又好用的国产SPL-转载
     前言 WebService/Restful广泛应用于程序间通讯,如微服务、数据交换、公共或私有的数据服务等。之所以如此流行,主要是因为WebService/Restful采用了XML/Json这类多层结构化数据进行信息传递。XML/Json不仅是文本格式,而且支持多层结构,可承载足够通用和足够丰富的信息。但多层结构要比传统的二维表复杂,取数后再处理的难度也大。  背景 早期,没有专业的json/XML的后处理技术,Java开发者通常要采取硬写代码或入库再用SQL的方式。硬写代码工作量巨大,计算能力几乎为零,开发效率极低。SQL虽然可以提供部分计算能力,但存在明显的架构缺陷,不仅会因为引入SQL而制造额外的耦合性,而且会因为入库过程导致额外的系统延迟。此外,数据库只适合计算二维表,多层结构化数据的计算能力并不强。  后来,XPath/JsonPath、Python Pandas、Scala这类专业的json/XML的后处理技术出现了,才终于在保证较好架构性的同时,提供了一定的计算能力。但这些技术也存在各自的问题,XPath/JsonPath只支持条件查询和简单聚合,不支持一般的日常计算,比如排序、去重、分组汇总、关联、交集等,而且没有自己的多层数据对象,计算能力较差。  Python Pandas支持一般的日常计算,其数据对象dataFrame能描述二维表,但计算处理多层数据并不方便,而且和Java应用的集成性很不好。Scala的数据对象dataFrame也类似,可以描述多层结构,但计算处理也不方便。此外,Scala和Pandas对XML支持得都不好,要手工进行类型转换,或引入第三方类库,开发效率不高。  所以,SPL是个更好的选择。  专业多层数据对象 SPL是JVM下开源的结构化数据/多层数据处理语言,内置专业的多层数据对象和方便的层次访问方法,可以表达复杂的层次关系,为上层计算能力提供有力的支持。  SPL提供了专业的多层数据对象序表,可以直观地表现XML\Json的层级结构。  比如,从文件读取多层XML串,解析为序表:  A 1    =file(“d:\xml\emp_orders.xml”).read() 2    =xml(A1,“xml/row”) 点击A2格可以看到多层序表的结构,其中,EId、State等字段存储简单数据类型,Orders字段存储记录集合(二维表)。点击Orders中的某一行,可以展开观察数据:   序表也可以表达来自文件的多层Json(与上面的XML同构):  A 1    =file(“d:\xml\emp_orders.json”).read() 2    =json(A1) 点击A2格可以看到,来自Json的序表与来自XML的序表一样。事实上,SPL序表可以统一地表达不同来源的多层数据,无论XML还是Json,无论WebService还是Restful,这是其他技术难以做到的。  SPL提供了方便的多层数据访问方法,可以通过点号访问不同的层级,通过下标访问不同的位置。  第1层的单个字段的集合:A2.(Client)  第1层的多个字段的集合:A2.([Client,Name])  第2层所有记录的集合:A2.conj(Orders)  第1层第10条记录:A2(10)  第1层第10条记录的Orders字段(即所有下层记录):A2(10).Orders  第1层第10条件记录Orders字段的单个字段的集合:(A2(10).Orders).(Amount)  第1层第10条件记录Orders字段的第5条记录:(A2(10).Orders)(5)  第1层的第10-20条记录:A2(to(10,20))  第1层的最后三条记录:A2.m([-1,-2,-3])  SPL序表专业性强,可以表达复杂的层次关系。比如,针对多含多个子文档的多层Json:  [    {       "race": {           "raceId":"1.33.1141109.2",           "meetingId":"1.33.1141109"       },       ...       "numberOfRunners": 2,       "runners": [         {     "horseId":"1.00387464",               "trainer": {                   "trainerId":"1.00034060"               },           "ownerColours":"Maroon,pink,dark blue."           },           {   "horseId":"1.00373620",               "trainer": {                   "trainerId":"1.00010997"               },           "ownerColours":"Black,Maroon,green,pink."           }       ]    }, ... ] 进行不同层级的分组汇总(对trainerId分组,统计每组中 ownerColours的成员个数),一般的技术难以写出代码,SPL就简单多了:  A 1    … 2    =A1(1).runners 3    =A2.groups(trainer.trainerId; ownerColours.array().count():times) 强大计算能力 以序表为基础,SPL内置丰富的计算函数、日期函数、字符串函数,提供了强大的计算能力。依靠函数选项、层次参数等高级语法,SPL提供了超越SQL的计算能力。  SPL内置丰富的计算函数,基础计算一句完成。比如,对多层数据进行条件查询:  A 2    …//省略取数解析 3    =A2.conj(Orders) 4    =A3.select(Amount>1000 && Amount<=2000 && like@c(Client,“business”)) 可以看到,SPL对条件查询的支持很完整,包括关系运算符、逻辑运算符、正则表达式和字符串函数,如模糊匹配like。此外,SPL还支持在条件查询中使用数学运算符(函数)、位置函数、日期函数。  更多例子:  A    B 2    …     3    = A3.sum(Salary)    聚合 4    =A2.groups(State,Gender;avg(Salary),count(1))    第1层分组汇总 5    =A2.conj(Orders).groups(Client;sum(Amount))    第2层分组汇总 6    =A1.new(Name,Gender,Dept,Orders.OrderID,Orders.Client,Orders.Client,Orders.SellerId,Orders.Amount,Orders.OrderDate)    关联 7    =A1.sort(Salary)    排序 8    =A1.id(State)    去重 9    =A2.top(-3;Amount)    topN 10    =A2.groups(Client;top(3,Amount))    组内TopN(窗口函数) SPL内置大量日期函数和字符串函数,在数量和功能上远远超过其他技术甚至SQL,同样的运算代码量更短。比如:  时间类函数,日期增减:elapse("2020-02-27",5) //返回2020-03-03  星期几:day@w("2020-02-27") //返回5,即星期6  N个工作日之后的日期:workday(date("2022-01-01"),25) //返回2022-02-04  字符串类函数,判断是否全为数字:isdigit("12345") //返回true  取子串前面的字符串:substr@l("abCDcdef","cd") //返回abCD  按竖线拆成字符串数组:"aa|bb|cc".split("|") //返回[“aa”,“bb”,“cc”]  SPL还支持年份增减、求年中第几天、求季度、按正则表达式拆分字符串、拆出SQL的where或select部分、拆出单词、按标记拆HTML等功能。  SPL提供了函数选项、层次参数等方便的函数语法,可以提供更强的计算能力。功能相似的函数可以共用一个函数名,只用函数选项区分差别。比如select函数的基本功能是过滤,如果只过滤出符合条件的第1条记录,可使用选项@1:  Orders.select@1(Amount>1000)  数据量较大时,用并行计算提高性能,可使用选项@m:  Orders.select@m(Amount>1000)  对排序过的数据,用二分法进行快速过滤,可用@b:  Orders.select@b(Amount>1000)  函数选项还可以组合搭配,比如:  Orders.select@1b(Amount>1000)  结构化运算函数的参数常常很复杂,比如SQL就需要用各种关键字把一条语句的参数分隔成多个组,但这会动用很多关键字,也使语句结构不统一。SPL支持层次参数,通过分号、逗号、冒号自高而低将参数分为三层,用通用的方式简化复杂参数的表达:  join(Orders:o,SellerId ; Employees:e,EId)  优化体系结构 SPL内置易于集成的JDBC接口,可有效降低系统耦合性,并支持代码热切换。SPL支持多种多层数据源,可用一致的代码进行计算,使代码易于移植。  SPL提供了通用的JDBC接口,可以被JAVA代码方便地集成。 比如,将前面的SPL代码存为脚本文件,在JAVA中以存储过程的形式调用文件名:  Class.forName("com.esproc.jdbc.InternalDriver"); Connection connection =DriverManager.getConnection("jdbc:esproc:local://"); Statement statement = connection.createStatement(); ResultSet result = statement.executeQuery("call groupBy()"); 1 2 3 4 SPL脚本文件外置于JAVA,使计算代码和应用程序分离,可有效降低系统耦合性。SPL是解释型语言,修改后不必重启JAVA应用就可以直接执行,从而实现代码热切换,可保障系统稳定,降低维护难度。  SPL支持来自WebSerivce和Restful的多层数据。比如,从WebService读取多层XML,进行条件查询:  A 1    =ws_client(“http://127.0.0.1:6868/ws/RQWebService.asmx?wsdl”) 2    =ws_call(A1,“RQWebService”:“RQWebServiceSoap”:“getEmp_orders”) 3    =A2.conj(Orders) 4    =A3.select(Amount>1000 && Amount<=2000 && like@c(Client,“business”)) 类似地,从Restful取多层Json,进行同样的条件查询:  A 1    =httpfile(“http://127.0.0.1:6868/restful/emp_orders”).read() 2    =json(A1) 3    =A2.conj(Orders) 4    =A3.select(Amount>1000 && Amount<=2000 && like@c(Client,“business”)) SPL支持MongoDB、ElasticSearch、SalesForce等特殊数据源中的多层数据,可直接从这些数据源取数并计算。  比如,从MongoDB取多层Json,进行条件查询:  A 1    =mongo_open(“mongodb://127.0.0.1:27017/mongo”) 2    =mongo_shell@x(A1,“data.find()”) 3    =A2.conj(Orders) 4    =A3.select(Amount>1000 && Amount<=2000 && like@c(Client,“business”)) 除了多层数据,SPL也支持数据库,txt\csv\xls等文件, Hadoop、redis、Kafka、Cassandra等NoSQL。虽然数据源不同,但在SPL中的数据类型都是序表,因此可以用一致的方法计算多层数据,这样的计算代码也更容易移植。  XPath/JsonPath、Python Pandas、Scala等技术存在各自的缺陷,开发效率不高。SPL内置专业的多层数据对象和方便的层次访问方法,擅长计算结构复杂的多层数据。SPL内置丰富的库函数,提供了超过SQL的计算能力。SPL支持易用的JDBC接口、代码外置能力,支持来自多种文件和网络服务的多层数据源,可大幅提高WebService\Restful取数后的开发效率。  SPL资料 SPL官网 SPL下载 SPL源代码 欢迎对SPL有兴趣的加小助手(VX号:SPL-helper),进SPL技术交流群 ———————————————— 版权声明:本文为CSDN博主「知心宝贝」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_53673551/article/details/125271219 
  • [交流吐槽] 建议华为开源镜像站Ubuntu镜像直接把sources.list内容放出来
    华为开源镜像站的Ubuntu镜像界面里sources.list文件的更新是通过sed工具实现如果之前对官方sources.list进行过修改,比如改成过阿里云镜像站、清华镜像站,则sed工具操作会失败建议直接将包含华为镜像站连接的sources.list内容放出来,用户只需进行复制粘贴即可完成更新
  • [讨论交流] 开源之夏 | 【结项报告】毕昇Fortran编译器内联动态库函数str_copy
    项目简介项目名称:毕昇Fortran编译器内联动态库函数str_copy项目描述:毕昇Fortran编译器是一款基于classic flang的高性能Fortran编译器,支持Fortran编程语言的编译和运行,提供强大的数值计算和数据处理能力,在科学计算领域应用前景广阔。f90_str_copy_klen是一个实现字符串拷贝功能的动态库函数,本项目是对该动态库函数进行内联,预期提高编译器字符串拷贝的性能。项目导师:peixin-qiao项目开发者:王哲葳,华东师范大学硕士在读项目链接:cid:link_2开发详情方案描述Flang编译器主要由flang1和flang2两个组件组成,其中flang1用于解析Fortran代码并生成中间表示,然后通过flang2生成LLVM IR并输出。本项目的主要任务就是在flang2中对解析出的“f90_str_copy_klen”函数进行内联优化。这个项目的方案分为如下几步:01flang2会获得通过Fortran生成的IR指令列表,遍历该列表,寻找到函数调用指令“I_CALL”。02通过“I_CALL”指令的位置查询所调用的是否为需要被内联的函数,如本项目需要实现的“f90_str_copy_klen”函数的内联。在确认需要内联的函数后开始生成相应的指令,“f90_str_copy_klen”函数的内联指令生成过程如下:将复制后得到的字符串称为目标字符串,待复制的字符串称为输入字符串。首先需要从原先的指令中获得输入字符串并开辟一系列内存空间用于记录目标字符串、输入字符串的起始地址、字符串索引及字符串长度。对每一个输入字符串,从头开始遍历。分别判断当前目标字符串、输入字符串的索引是否小于其长度,如果均符合则将输入字符串中对应索引的字符复制到目标字符串的相应地址中。如果输入字符串索引大于等于其长度则处理下一个输入字符串。如果目标字符串索引大于等于其长度则停止字符串的复制。按照2所述流程依次遍历函数中的输入字符串,直至所有字符串都完成复制。目标字符串索引是否仍小于其长度,若是,则将目标字符串中剩余未被赋值的字符用空格进行补充。将实现上述功能的指令替换掉对应的“I_CALL”指令。03继续flang2中的流程以生成对应的LLVM IR 文件。项目产出☑ 实现了项目方案中所需的功能。☑ 分别用一个字符串、三个字符串作为输入字符串,完成了共十种输入字符串各种长度情况下”f90_str_copy_klen”函数内联的的功能性测试,在这些输入字符串中也包含了一些ASCII码小于32(ASCII码为32表示空格)的特殊字符。十种情况如下:a=blen(a) < len(b)len(a) = len(b)len(a) > len(b)a = b // c // dlen(a) < len(b)len(a) = len(b)len(b) < len(a) < len(b) + len(c)len(a) = len(b) + len(c)len(b) + len(c) < len(a) < len(b) + len(c) + len(d)len(a) = len(b) + len(c) + len(d)len(a) > len(b) + len(c) + len(d)☑ 将“f90_str_copy_klen”在函数中调用一亿次,对内联前后所花费的时间做对比。实验结果显示没有内联时运行花费的时间约为10秒,内联后运行花费的时间约为0.7秒。测试代码如下:主函数:main.f90program main   integer :: i   character(20) :: a, b, c, d   a = "aaaaaaaaaaaaaaa"   b = "aaaaaaaaaaaaaaa"   c = "aaaaaaaaaaaaaaa"   do i = 1, 100000000     call test(a, b, c, d, 20)   enddo end字符串拼接拷贝函数:test.f90subroutine test(a, b, c, d, n)   integer :: n   character(n) :: a, b, c, d   d = a // b // c end subroutine测试方法如下:未优化前:$ flang main.f90 -c $ flang test.f90 -O3 -c $ flang main.o test.o -o a.out $ time ./a.out real 0m10.190suser 0m10.180ssys 0m0.004s优化之后(编译选项-Mx,218,0x1使能该优化功能):$ flang main.f90 -c $ flang test.f90 -O3 –c –Mx,218,0x1 $ flang main.o test.o -o a.out $ time ./a.outreal 0m0.706suser 0m0.702ssys 0m0.004s后记除开源之夏外,Compiler SIG还发布了十多个开源实习任务(戳 开源实习1、开源实习2 了解详情),欢迎各位高校生报名参与~
  • [问题求助] 为什么我的代码编译不了?
    而且必须进入bearpi-hm_nano再进行ls才能看见和视频一样的文件
  • [热门活动] 【活动预告】LLVM Clang开源社区线下见面会--加拿大多伦多地区
    活动介绍LLVM是模块化和可重用的编译器和工具链技术的集合。它是许多现代编译器的基础,包括Clang (C/C++/Objective-C)、GHC (Haskell)、DragonEgg(Ada、Fortran、...)、许多商业OpenCL编译器、RenderScript等。LLVM开源社区聚集了众多在LLVM上工作或与LLVM合作的研发人员,在领域内颇具影响力。本次活动是后疫情时期,加拿大多伦多地区首次举行的LLVM/Clang开源社区线下见面活动,欢迎每个对LLVM、Clang、lldb、Polly、Swift、Rust感兴趣的开发者参与讨论。华为多伦多异构编译器实验室资深编译器研究员Amy Wang将就“使用MLIR for AI加速器优化SYCL程序”专题进行演讲,展开讨论,碰撞灵感火花。活动时间东部夏令时间:2022年8月17日 18:00-20:00北京时间:2022年8月18日 06:00-08:00活动地点Room 1, Toronto Public Library – North York Central Library5120 Yonge St, North York, ON, Canada演讲内容主题:Optimizing for SYCL Programs with MLIR for AI Accelerators简介:There is a growing need for higher level abstractions for device kernels in heterogeneous environments, and the multi-level nature of the MLIR infrastructure perfectly addresses this requirement.  As SYCL begins to gain industry adoption for heterogeneous applications and MLIR continues to mature, this talk focuses on the effort in targeting SYCL's device code generation for Huawei's AI accelerator.  It also covers numerous interesting aspects ranging from runtime support, to SYCLops, an LLVM-to-MLIR converter, to optimizations performed in MLIR.演讲嘉宾Amy Wang is a senior compiler researcher working for Huawei's Heterogeneous Compilers Lab in Markham.  Her past research areas include auto-SIMDization, transactional memory and the Java language runtime. Recently, she spends most of her effort in SYCL device code generation targeting Huawei's AI accelerator, a.k.a. the DaVinci chip, using MLIR.  She had previously worked in IBM's XL compiler team prior to joining Huawei.参加方式线下活动注册:cid:link_0活动将全程录像并上传至YouTube及B站Compiler SIG介绍Compiler SIG 专注于编译器领域技术交流探讨和分享,包括 GCC/LLVM/OpenJDK 以及其他的程序优化技术,聚集编译技术领域的学者、专家、学术等同行,共同推进编译相关技术的发展。扫码添加 SIG 小助手微信,邀请你进 Compiler SIG 微信交流群。原文转载自 毕昇编译-活动预告 | LLVM Clang开源社区线下见面会--加拿大多伦多地区
总条数:138 到第
上滑加载中