属性集: Properties、函数式编程、Stream流

本文深入讲解Java中的Properties类使用,包括加载属性集、获取和设置属性;探讨函数式接口如Supplier、Consumer、Predicate和Function的应用场景及组合使用,示例说明如何简化代码,提升编程效率。

一。属性集: Properties, 仅支持String类型的属性映射
extends Hashtable implements Map
key - value,
推荐使用的方法
void setProperty(String key, String value)
String getProperty(String key)
加载属性集:
void load(Reader)
void load(InputStream)

public class DemoProperties {
    @Test
    public void test01() throws IOException {
        // 1.创建属性集对象
        Properties pro = new Properties();
        // "root" "root"
        // 2.通过流加载属性集
        /*String path = DemoProperties.class.getClassLoader().getResource("config.properties").getPath();
        pro.load(new FileInputStream(path));*/
        InputStream is = DemoProperties.class.getClassLoader().getResourceAsStream("config.properties");
        //加载属性集:
		pro.load(is);

        // 3.获得属性集中的value值
        String name = pro.getProperty("name");
        System.out.println(name);

        // 4.直接给属性集设置属性
        pro.setProperty("url", "http://www.baidu.com");

        String url = pro.getProperty("url");
        System.out.println(url);

        String username = pro.getProperty("username");
        System.out.println(username);
        /*username = new String(username.getBytes("ISO8859-1"), "UTF-8");
        System.out.println(username);*/
    }
}
//创建配置文件config.properties
\\key = value
name = mysql
password = 12345
username = \u5F20\u4E09

二。函数式接口:接口中只有一个抽象方法
函数式编程: Lambda表达式(函数式接口作为方法的参数)
常用函数式接口: Supplier Consumer Predicate Function

  1. Supplier: 生产者 - T get();
public class Demo01 {
    /*
    为了使用Lambda表达式, 所以将Supplier作为方法参数使用
    方法的目的: 为了返回一个字符串对象
     */
    public static String getInstance(Supplier<String> sup) {
        // 调用Supplier 的get方法
        return sup.get();//get()方法没有参数
    }
    public static void main(String[] args) {
        // 调用getInstance方法, 需要传递一个Supplier接口实现类
        // 又因为Supplier接口是函数式接口, 所以可以使用Lambda表达式
        String str = getInstance(() -> {
            // 这是生产字符串的过程
            //生产过程,就是生产出一个返回的东西
            return "hello";});
        System.out.println(str);
    }
}
-----------------------------------------
public class Demo02Test {
    /**
     * 传入一个数组, 获得数组的最大值并返回
     * 还要使用Supplier这个接口
     */
    public static int getMax(Supplier<Integer> sup) {
        return sup.get();
    }

    public static void main(String[] args) {
        int[] arr = {98, 23, 16, 34, 72};
        int m = getMax(() -> {
            int max = 0;
            for(int i : arr) {
                if (max < i) {
                    max = i;
                }
            }
            return max;
        });
        System.out.println(m);
    }
}

2.Consumer: 消费者 - void accept(T t); 使用这个对象
默认方法 - andThen(Consumer)
将两个消费方式组合在一块

public class Consumer1 {
    public static void main(String[] args) {
        String xx = "Hello";
        consumeString(xx,//消费过程就是对传入的xx进行操作
                s -> System.out.println(s)
        );

        String mm = "www.9090";
        andThenConsume(mm,
                s -> System.out.println(s.split("\\.")[0]),//消费过程
                s -> System.out.println(s.split("\\.")[1])
        );
    }
    //accept()
    public static void consumeString(String xx, Consumer<String> function) {//泛型类型是消费对象的类型
        //调用接口函数方法
        function.accept(xx);
    }
    //andThen()
    public static void andThenConsume(String mm, Consumer<String> s1, Consumer<String> s2) {//andThen构造方法
        s1.andThen(s2).accept(mm);
    }
}

---------------------------------------------------------
public class Counsum2 {
 /**
     * 请按照格式“ 姓名:XX。性别:XX。 ”的格式将信息打印出 来
     * str: "迪丽热巴,女"
     * 第一次消费: 姓名:迪丽热巴.
     * 第二次消费: 性别:女.
     */
    public static void main(String[] args) {
        String[] arry={"迪丽热巴,女","古力娜扎,女","马儿扎哈,男"};
        printInfor(arry,
                s-> {System.out.println("姓名:"+s.split(",")[0]+"."); },
                s-> {System.out.println("性别:"+s.split(",")[1]+".");}
                );
    }
    public static void printInfor(String[] arry, Consumer<String>s1,Consumer<String>s2){
        for(String str:arry){
            s1.andThen(s2).accept(str);
            /*相当于
            s1.accept(str);
            s2.accept(str);*/
        }
    }
}

3.Predicate: 对对象做判断 - boolean test(T t);
默认方法 - or(||) and(&&) negate(!)

public class demo1 {
    public static void main(String[] args) {
        //test
        testPredicate("看看看看",s->{
            return s.length()==4;//判断过程
                }
                );
        //and
        andPredicate("电话卡",
                s -> {return s.length()==3;
                },
                s -> {return s.contains("电");}
                );
        //or
        orPredicate("悬浮 悟空",
                s -> {return s.contains(" ");},
                s -> {return s.contains("d");}
                );
        //negate
       negatePredicate("悬浮 悟空",
                s -> {return s.contains(" ");}
        );
    }
    public static void testPredicate(String str, Predicate<String> pri){
        //test
        boolean b=pri.test(str);
        System.out.println(b);
    }
    public static void andPredicate(String str,Predicate<String> p1,Predicate<String> p2){
        //and
        boolean b=p1.and(p2).test(str);
        //相当于p1.test(str)&&p2.test(str);
        System.out.println(b);
    }
    public static void orPredicate(String str,Predicate<String> p1,Predicate<String> p2){
        //or
        boolean b=p1.or(p2).test(str);
        //相当于p1.test(str)||p2.test(str);
        System.out.println(b);
    }
    public static void negatePredicate(String str,Predicate<String> p1){
        //negate
        boolean b=p1.negate().test(str);
        System.out.println(b);
    }
}
------------------------------------------------------------
public class Demo2 {
/**
 * 数组当中有多条“姓名+性别”的信息如下,
 * { "迪丽热巴,女", "古力娜扎,女", "⻢尔扎哈,男", "赵丽颖,女" };
 * 请通过 Predicate 接口的拼装将符合要求的字符串筛选到集合 ArrayList 中,
 * 需要同时满足两个条件:
 * 1. 必须为女生;
 * 2. 姓名为4个字。
 */
    public static void main(String[] args) {
        String[] arr = {"迪丽热巴,女", "古力娜扎,女", "马儿扎哈,男", "赵丽颖,女"};
        List<String> list = new ArrayList<>();
        list = filter(arr,
                //判断过程
                s -> s.split(",")[1].equals("女"),

                s -> s.split(",")[0].length() == 4
        );
        System.out.println(list);
    }

    public static List<String> filter(String[] arr, Predicate<String> p1, Predicate<String> p2) {
        List<String> list = new ArrayList<>();

        for (String str : arr) {
            if (p1.and(p2).test(str)) {
                list.add(str);
            }
        }
        return list;
    }
}
  1. Function<T, R>: 类型转换 - R apply(T t);
    默认方法 - andThen(Function)
    连续做两种类型转换
public class Function1 {//类型转换
    public static void main(String[] args) {
        //apply
        String str="321";
        applyFunction(str,s ->
            Integer.parseInt(str)
                );
        //andthen
        String str2="5622";
        andThenFunction(str,
                b -> Integer.parseInt(str2),
                b -> String.valueOf(b)
        );
    }
    public static void applyFunction(String str,Function<String,Integer> fun){
        //apply
        int num=fun.apply("str");
        System.out.println(num);
    }
    public static void andThenFunction(String str,Function<String,Integer> b1,Function<Integer,String> b2){
        //andThen
        String numstr=b1.andThen(b2).apply(str);
        System.out.println(numstr);
    }
}
-------------------------------------------------
public class Function2 {
/**
 * String str = "赵丽颖, 20";
 * 1. 将字符串截取数字年龄部分,得到字符串;
 *      "赵丽颖, 20" -> "20"   Function<String, String>
 * 2. 将上一步的字符串转换成为int类型的数字;
 *      "20" -> 20     Function<String, Integer>
 * 3. 将上一步的int数字累加100,得到结果int数字。
 *      20 -> 120      Function<Integer, Integer>
 */
    public static void main(String[] args) {
       change("赵丽颖, 20",
               // "赵丽颖, 20" -> "20"
               s -> s.split("[, ]+")[1],
               // "20" -> 20
               s -> Integer.valueOf(s),
               // 20 -> 120
               i -> i + 100 );
    }
public static void change(String str, Function<String, String> fun1, Function<String, Integer> fun2, Function<Integer, Integer> fun3) {
        int i = fun1.andThen(fun2).andThen(fun3).apply(str);
        System.out.println(i);
    }
}

三。Stream流: 操作 数组或者集合
获取流: 1.集合 Collection Map
2.数组
常用API:
void forEach(Consumer) - 终结方法
Stream filter(Predicate) - 延迟方法
Predicate中test返回true, 是保留在流中的
Stream map(Function<T, R>) - 延迟方法
将 流中的 T类型的数据, 转成 R类型数据, 并且存入新的流中
static Stream concat(Stream, Stream)
将两个流拼接成一个
1.获得流对象

public class Demo02GetStream {
    public static void main(String[] args) {
        // 1.单列集合获得流对象 List Set
        // List -> Stream
        List<String> list = List.of("喜羊羊", "美羊羊","懒洋洋","暖洋洋");
        Stream<String> streamList = list.stream();
        // Set -> Stream
        Set<String> set = Set.of("张无忌", "张三丰", "张翠山", "张飞");
        Stream<String> streamSet = set.stream();

        // 2.多列集合 Map
        Map<Integer, String> map = Map.of(1, "张飞", 2, "关羽", 3, "刘备", 4, "周瑜");
        // 获得map中的key
        Set<Integer> keys = map.keySet();
        Stream<Integer> streamKey = keys.stream();
        // 获得map中 key-value对 entry
        Set<Map.Entry<Integer, String>> entries = map.entrySet();
        Stream<Map.Entry<Integer, String>> streamEntry = entries.stream();
        // 获得value部分
        Collection<String> values = map.values();
        Stream<String> streamValues = values.stream();

        // 3.数组获得Stream流的方式
        Integer[] arrInt = {1,2,3,4,5};
        Stream<Integer> streamInt = Stream.of(arrInt);

        // 4.传入数组的方式可以使用可变长参数替代
        Stream<Integer> streamInt2 = Stream.of(1, 2, 3, 4, 5);

    }
}
public class StreamText {
    public static void main(String[] args) {
        ArrayList<String> one = new ArrayList<>();
        one.add("迪丽热巴");
        one.add("宋远桥");
        one.add("苏星河");
        one.add("石破天");
        one.add("石中玉");
        one.add("老子");
        one.add("庄子");
        one.add("洪七公");
        ArrayList<String> two=new ArrayList<>();
        two.add("古力娜扎");
        two.add("张无忌");
        two.add("赵丽颖");
        two.add("张三丰");
        two.add("尼古拉斯赵四");
        two.add("张天爱");
        two.add("张二狗");
        //第一个队伍名字为三个字的成员姓名
        //第一队筛选后只要前三个
        Stream<String> streamOne=one.stream().filter(s->s.length()==3).limit(3);
        //第二个队伍只要姓张的
        //第二队筛选后前两个不要
        Stream<String> streamTwo=two.stream().filter(s->s.startsWith("张")).skip(2);
        //将两个队伍合并成一个
        Stream<String>newstream=Stream.concat(streamOne,streamTwo);
        //根据姓名创建Person对象
        Stream<Person> personStream=newstream.map(s -> new Person(s));
        //打印整个队伍的Person对象信息
        personStream.forEach(person -> System.out.println(person));// forEach 是一个终结方法

        /*合并队伍,创建对象,打印信息升级版
        Stream.concat(streamOne,streamTwo).map(Person::new).forEach(System.out
        ::println);
         */
    }
}
----------------------------------
public class Person {
    private String name;

    public Person() {
    }

    public Person(String name) {
        this.name = name;
    }
    ...
FY25专业力考试·Java考试大纲 一、基本要求 1. 掌握编程思维,能够运用逻辑思维和抽象思维,构建数据结构和算法实现业务需求。 2. 掌握Java基础语法:基本数据类型、变量、常量、运算符、泛型、控制语句(条件、循环)、方法(定义、调用、重载)。 3. 掌握Java面向对象编程:包、作用域与访问控制、类、对象、实例化、继承、封装、多态、抽象类和接口、静态变量和静态方法、内部类和匿名类。 4. 掌握Java异常处理:异常类和异常处理机制、try-catch-finally语法、throw与throws、自定义异常。 5. 掌握Java数组与集合类型的使用方法:数组的定义和初始化、多维数组、List-Set-Map接口与实现类(ArrayList、HashMap、HashSet、Vector)。 6. 掌握注解:注解定义和使用、元注解。 7. 掌握Java数据库编程和I/O编程:JDBC基础(Connection、Statement、ResultSet)、的概念、文件读写、字节和字符、缓存。 8. 掌握Java多线程编程:线程的生命周期、创建和启动线程、线程同步、线程池。 9. 掌握Java反射机制:Class 类型、动态创建对象、反射访问属性和方法。 10. 掌握Lambda 表达式:函数式接口、Lambda 表达式和方法引用、Stream API。 11. 掌握Java Web 开发基础:理解Servlet/JSP工作原理、MVC模式、MVVM模式、Spring框架基础知识。 12. 掌握自动化单元测试工具与方法:熟悉Junit、DBUnit。 二、考试内容 1. 编程思维和算法构建 - 能够综合运用Java语言各种特性,编写程序实现业务要求 - 能够通过阅读现有代码,分析理解调用关系和处理过程,进而形成有效的修改方案 - 掌握对代码进行重构和优化的常见方法:抽出方法、复杂判断优化、定义共通处理、抽象基类 - 掌握SOLID原则 - 掌握常见设计模式:工厂模式、单例模式、装饰器模式、模板方法模式、适配器模式 2. Java基础语法 - 掌握java数据类型的分类。 - 掌握基本数据类型的种类 - 掌握Java基本类型变量的定义和使用。 - 掌握java整数类型分类、长度、字节大小和表示范围 - 掌握java浮点数类型遵从标准的浮点规则 - 掌握java基本数据类型换 - 掌握布尔类型的换 - 掌握java变量的声明。 - 掌握java变量的作用域 - 掌握java中定义常量的关键字 - 掌握java中基本的运算符使用 - 掌握java中运算符的优先级 - 掌握跳语句 - 掌握方法定义内容 - 掌握方法调用方式 - 掌握调用方法时传参类型 - 掌握构造方法的特点 - 掌握重载的定义和使用场景 - 掌握重载和重写的区别 3. Java面向对象编程 - 掌握什么是Java包,如何声明和使用包,以及它们在代码组织中的作用 - 掌握访问修饰符(public、private、protected和默认)的作用和区别,以及它们在不同作用域中的使用 - 掌握什么是类和对象,如何定义类和创建对象 - 熟悉实例化对象的过程,如何使用构造方法来初始化对象 - 掌握继承,如何使用Extends着急字来实现继承以及如何处理Java中的单继承 - 掌握封装,如何使用访问修饰符实现封装,以及它在java中的重要性和优势 - 掌握多态性的概念,包括编译时多态和运行时多态,以及如何实现方法重写和方法重载 - 掌握抽像类,如何声明和使用抽像类,抽像类和普通类之间有哪些区别 - 掌握接口,理解接口的概念和作用,以及如何声明、实现和使用接口 - 掌握静态变量和静态方法,如何声明和使用它们,与实例变量、实例方法有何区别 - 理解静态声明和静态导入的概念,以及它们的用法 - 掌握内部类概念,包括静态内部类、非静态内部类、局部内部类和匿名内部类,以及如何创建和使用它们 - 掌握如何实现单继承和多重继承 - 掌握方法的final修饰符和作用与使用场景 - 掌握Super关键字调用父类的构造方法与方法的用法和注意事项 - 理解动态绑定(动态多态性)的概念,包括什么时候发生动态绑定和它的优势 - 掌握如何使用Final关键字来定义常量、阻止方法被重写和类被继承 - 掌握接口与抽像类之间的差异,以及在什么情况下使用它们更适合 - 掌握构造方法的作用和特点,以及默认构造方法的使用 - 掌握对象之间的关系,包括关联、聚合和组合 - 掌握重截构造方法,如何在一个类中实现多个构造方法 - 掌握类加载器和类加载机制在Java中的作用 - 掌握泛型的概念和作用,掌握泛型类、泛型接口和泛型方法 - 掌握使用枚举类型来定义常量和限制变量的取值范围 - 掌握序列化和反序列化的概念,以及如何在Java中实现对象的序列化 - 掌握反射,如何在java中使用反射机制获取类的信息和调用类的方法 - 掌握Record的语法特性和使用方法 4. Java异常处理 - 掌握日常工作或学习过程中常见的异常,理解异常原因 - 掌握运行时异常RuntimeException和非运行时异常的概念和区别 - 理解Checked Exceptions 和 Unchecked Exceptions的概念和区别 - 掌握异常栈信息的分析,判断根异常(… Caused by …) - 掌握try ... catch ... finally ... return各语句块,理解其执行顺序 - 掌握多个catch语句的匹配顺序(继承关系顺序) - 掌握finally语句作用和用途 - 掌握try-with-resource语法,以及各语句块执行顺序 - 理解Throwable、Error、Exception的概念和区别(异常继承关系) - 理解OutOfMemoryError,能够说明该异常发生的可能原因和相应的处理措施 - 理解StackOverflowError,能够说明该异常发生的可能原因和相应的处理措施 - 理解NoSuchMethodError、NoSuchMethodException区别,能够说明该异常发生的可能原因和相应的处理措施 - 理解NoSuchFieldError、NoSuchFieldException区别,能够说明该异常发生的可能原因和相应的处理措施 - 理解NoClassDefFoundError,能够说明该异常发生的可能原因和相应的处理措施 - 理解ClassNotFoundException,能够分析异常发生的可能原因和相应的处理措施 - 掌握ArrayIndexOutOfBoundsException异常原因和解决方法 - 掌握ConcurrentModificationException异常原因和解决方法 - 掌握NullPointerException异常发生的原因、如何排查、避免措施 - 掌握NumberFormatException异常原因和解决方法 - 掌握FileNotFoundException异常原因和解决方法 - 能够对SocketException、ConnectException网络编程中常见异常进行分析 - 能够对ConnectTimeoutException、ReadTimeoutException网络编程中常见异常进行分析 - 掌握断言关键字assert用法、优点、注意事项 - 掌握自定义异常,编写静态工具类,实现对象非空校验(Object、数组、集合) 5. Java数组与集合类型 - 掌握数组的特点 - 掌握数组的遍历和排序算法 - 掌握数组的动态扩容、插入、删除 - 结合代码片段,理解数组的引用 - 掌握数组和集合的区别 - 掌握Map、Collection、List、Set、Queue、Stack体系结构 - 掌握Set和List的区别 - 掌握ArrayList、HashMap、HashSet、Vector概述和区别 - 掌握ArrayList的遍历和删除 - 掌握ArrayList和ArrayIndexOutOfBoundsException - 掌握ArrayList的排序 - 掌握ArrayList和数组之间换 - 结合stream,掌握对ArrayList的数据做排序、聚合、分组、去重、取值 - 理解Properties的用途 - 掌握HashMap和HashTable的区别 - 掌握HashMap的常用方法和讲解 - 理解HashMap底层实现原理 - 掌握HashMap的遍历方法 - 理解HashMap如何处理hash冲突 - 理解HashMap容量扩展原理 - 掌握ConcurrentHashMap原理、常见用途、注意事项 - 掌握Collections、Arrays工具类常用方法 6. Java注解 - 理解注解(Annotation)概念和作用 - 掌握元注解(@Target、@Retention、@Repeatable、@Inherited、@Report、@Documented) - 掌握Java内置常见注解的参数、用途、应用场景,包括:@Override、@Deprecated、@SuppressWarnings等。 - 掌握自定义注解,包括注解声明和元素定义。 - 掌握注解在AOP中的应用,比如配置切面日志。 7. Java数据库编程和I/O编程 - 理解JDBC概述和作用 - 掌握Connection接口及其方法 - 掌握Statement接口及其方法 - 掌握PreparedStatement接口及其方法 - 掌握如何执行SQL查询和更新操作 - 掌握ResultSet接口及其方法 - 掌握批处理和事务管理 - 掌握异常处理和资源关闭 - 理解BLOB和CLOB数据类型 - 理解连接池作用 - 理解的概念和作用 - 理解字节和字符的区别 - 理解输入和输出的概念 - 掌握文件读写的基本操作 - 掌握字节的常用类和方法 - 掌握字符的常用类和方法 - 理解缓存的作用和原理 - 掌握缓存的常用类和方法 - 理解字符编码和字符集的概念 - 掌握字符串和字节数组换 - 掌握文件处理异常的处理方式 - 掌握处理异常的处理方式 8. Java多线程编程 - 创建线程:掌握如何创建线程,掌握创建线程的各种方式。 - 启动线程:掌握如何启动线程,理解使用start()和run()方法有何区别。 - 线程同步:掌握什么是线程同步,理解为什么要进行线程同步。 - synchronized关键字:掌握如何使用synchronized关键字实现线程同步,掌握其使用方式。 - 锁对象:掌握什么是锁对象,掌握如何使用锁对象进行线程同步。 - volatile关键字:理解volatile关键字的作用,理解什么时候使用volatile关键字。 - 线程安全:理解什么是线程安全,掌握如何保证线程安全。 - 线程池概述:理解什么是线程池,掌握为什么要使用线程池。 - 线程池的优势:能够列举使用线程池的优势和好处。 - Executor框架:理解什么是Executor框架,掌握它的主要组件。 - 线程池的创建:掌握如何创建线程池,掌握常见的线程池实现类。 - Callable和Future:理解什么是Callable和Future,掌握如何使用它们获取线程执行结果。 - 线程池的关闭:掌握如何正确关闭线程池,以及有哪些关闭方式。 - 并发集合:理解Java中常用的并发集合类及其使用场景。 - 同步器:理解CountDownLatch和CyclicBarrier。 9. Java反射机制 - 反射机制概述:理解什么是Java反射机制,以及为什么要使用反射。 - Class类:理解描述Class类的作用和常用方法。 - 获取Class对象:理解获取Class对象的三种方式。 - 动态创建对象:掌握如何使用反射动态创建对象。 - 反射访问属性:掌握如何使用反射访问对象的属性。 - 反射访问方法:掌握如何使用反射调用对象的方法。 - 获取构造方法:掌握如何使用反射获取对象的构造方法。 - 获取字段信息:掌握如何使用反射获取对象的字段信息。 - 修改字段值:掌握如何使用反射修改对象的字段值。 - 反射应用:理解反射在实际开发中的典型应用场景。 10. Lambda 表达式 - 理解Lambda 表达式的语法和结构 - 掌握Lambda 表达式的使用场景和好处 - 熟练编写简单的Lambda 表达式 - 理解函数式接口的定义和特点 - 掌握使用@FunctionalInterface注解声明函数式接口 - 掌握常见的函数式接口,如Consumer、Predicate、Function等 - 熟悉函数式接口在Lambda 表达式中的应用 - 理解Lambda 表达式和方法引用的关系 - 能够比较Lambda 表达式和匿名内部类的异同 - 理解方法引用的概念和用法 - 掌握四种方法引用的类型:静态方法引用、实例方法引用、类方法引用、构造方法引用 - 掌握使用Lambda 表达式和方法引用简化代码 - 了解Stream API的作用和优势 - 理解如何创建Stream 对象 - 掌握Stream API中常用的中间操作和终端操作 - 熟悉Stream API在集合数据处理中的应用场景 11. Java Web 开发基础 - 理解Servlet的生命周期和工作原理 - 理解Servlet的请求和响应处理机制 - 理解JSP和Servlet的关系 - 了解MVC模式的基本思想 - 理解MVC模式的三个核心组件以及他们的关系:模型、视图和控制器 - 掌握如何将业务逻辑、数据和界面分离,实现代码的可维护性和可扩展性 - 理解MVVM模式在前端开发中的作用和优势 - 掌握ViewModel的概念和作用,VewMode如何实现业务逻辑与视图逻辑分离 - 熟悉数据绑定、事件处理等MVVM模式的关键特性 - 了解Spring框架的起源和发展 - 理解Spring的核心概念和作用:IOC、AOP - 理解SpringBoot和Spring的关系 12. 自动化单元测试 - 掌握JUnit注解:@Test、@Before, @After等 - 理解DBUnit工作原理 - 掌握JUnit中如何使用断言 - 掌握Mocking,Stubbing 三、题型设置 题型 比例(分数) 数量 分值 选择题(单选) 60% 20 每题3分 编程题 40% 4 每题10分 四、难度定义 难度 比例(分数) 低 20% 中 60% 高 20% 五、通过标准 职级 通过分数 02级初级软件工程师 30 03级软件工程师 39 04级高级软件工程师 48 六、参考资料 1. 《Java语言程序设计》(基础篇 原书第10版)机械工业出版社 作者:Y.Daniel Liang 2. 《Java核心技术·卷I》(原书第12版)机械工业出版社 作者:Cay S.Horstmann 3. 《On Java 中文版 基础卷》人民邮电出版社 作者:Bruce Eckel。 这是我的考试大纲。我属于04级高级软件工程师。按照题型设置选择题(单选)20,每题3分。编程题4,每题10分。和参考资料。帮我生成1套练习题。
最新发布
10-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值