Java知识点

1集合的稳定性和有序性

LInkedHashmap 是稳定性的,应该不是有序性的;

2合理利用集合的稳定性(order)和有序性(sort),避免集合的无序性和不稳定性带来的负面影响。**稳定性指集合每次遍历的元素次序是一定的,稳定性是外部特征的表现。有序性是指遍历的结果按某种比较规则依次排序的。**有序性是内部的特征,


ArrayList是order/unsort,HashMap是unorder/unsort,TreeSet是order/sort

引申:可以通过TreeSet结合ArrayList对结果进行排序
————————————————
版权声明:本文为CSDN博主「atongyeyeYE」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/atongyeyeYE/article/details/84857137

2抽象类和接口的区别

1. 语法层面上

  • 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
  • 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
  • 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
  • 一个类只能继承一个抽象类,而一个类却可以实现多个接口。

说明抽象类只是类的另一种形式。而接口是一个公共的方法集合,不能有别的,一旦用了一个方法还得全部都得用,很纯粹,很牛XX

2. 设计层面上

要真正理解和区分,就要在设计层面上下功夫了,这样才能知道在什么场景下用它。

  • 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。

4URI

U****RI 是统一资源标识符,而 URL 是统一资源定位符。 因此,笼统地说,每个 URL 都是 URI,但不一定每个 U****RI 都是 URL。 这是因为 U****RI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。 上面的 mailto、news 和 isbn U****RI 都是 URN 的示例。

3方法引用::优化Lambda表达式

public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("11");
    list.add("12");
    list.add("13");
    list.add("14");


    //String[] arr = new String[2];
        //集合转成为一个数组;
        String[] array = list.toArray(String[]::new);
        //数组转成为一个集合,但是不能用删除修改能方式,是一个适配器模式
        List list1 = Arrays.asList(array);

        System.out.println(Arrays.toString(array));
        list.sort(String::compareTo);
     //一个数组转换成字符串;
     //String nes = new String(array,0 ,size);
}

集合

1hashMap:

  1. 当链表为阈值8的时候,链表转红黑树:
    1. 容器中节点分布在hash桶中的频率遵循泊松分布;
    • ​ 看作者的注解:当为8的时候,依据泊松分布(离散形式).概率统计得出,当为8的时候,链表中的元素个数的概率已经非常小了;所以作者选择了元素个数为8;是根据概率统计而选择的;
    2加载因子是0.75?

    默认是0.75;是对空间和时间效率的一个平衡选择;

    根据散列表的查找效率取决于三个因素:散列函数,处理冲突的方法,和填装因子;其中,填装因子定义为一个表的装满程度;为表中记录数n/散列表长度m;记录越满,发生冲突的可能性越大,反之,可能性越小;

    ​ 根据hash值判断hash因子:put方法中

    3为啥hashmap数组的长度是2的幂次方? / 为啥扩容的时候,是2的幂次方?

    (1)hashmap用的哈希函数本质是除留余数法;也就是求模留余数;改进成了hascode高位异或右移16位的值;为了右移,用右移取代了求模;因为右移的速度快;

    (2)从存储方面来说,在操作系统的内存管理中,对于虚拟内存的技术实现;建立在请求分页存储管理;

    为方便地址转换:页面大小应该是2的整数幂;同时页面大小应该始终,负责页表会过长,占用大量内存;页面的大小也应该在空间效率和时间效率之间权衡;

    jdk1.7和jdk1.8的区别:

    ​ 1.7为链表+数组,1.8为链表+数组+红黑树

    ​ 头插法和尾插法

5语法糖

1自动装箱;

public class aaa {
    public static void main(String[] args) {
        Integer  a = 1;
        Integer b=2;
        Integer c=3;
        Integer d=3;
        Integer e =321;
        Integer f =321;
        int r =322;
        int t =322;
       // Integer
        Long g=3L;
        System.out.println(c== d );//ture 在对立面保存
        System.out.println(c.equals(d) );//ture 在面保存;
        // 因为Java里面对处在在-128~127之间的Integer值,
        // 用的是原生数据类型int,此时调用的是Integer.valueOf()方法,会在内存里供重用
        System.out.println(e==f);//false
        System.out.println(c==(a+b));//拆箱;true
        System.out.println(c.equals(a+b));//true
        System.out.println("--->>>");
        System.out.println(g==(a+b));//true;==运算在遇到算数运算的时候解自动拆箱;
        System.out.println(g.equals(a+b));//false;equals()方法不处理数据转型的关系;\
        System.out.println("--->");
        System.out.println(t==r);
        System.out.println(t==r);

    }
}

2泛型:

java 中是类型擦除泛型

c#是具现代化式泛型

java是引用传递;未来会提供值传递的技术支持;在VarHandle项目顺利发布技术预览版;被称作内敛类型;

擦除法:仅仅是对方法的Code属性中的字节码进行擦除;实际上元数据中还是保留了泛型的信息;这也是我们在编码时能通过反射手段取得参数化类型的根本依据;

6后端编译和优化

1针对于 判断为空或者true选择if或者try-catch

if是执行一次就判断一次;如果true和false的比例大致相同;就用if

如果大多数为true.就用try-catch;这种避开的处理思路:隐式异常处理

因为try-catch减少了判断的程序时间复杂度;但是他也有弊端;他每一次判断的结果为false或者null的时候;就会进入异常;意味着涉及到进程从用户态转到内核态处理的 过程;结束后在回到 用户态;速度远比一次判断为空检查慢得多;

优化:

  1. 最重要的优化技术之一:方法内联

  2. 最前沿的优化技术之一:逃逸分析

  3. 与语言无关的经典优化技术之一:(局部)公共子表达式消除

  4. 与语言无关的经典优化技术之一:数组边界检查消除;在java中;每次都要判断;虚拟机可以根据数据流分析确定是否越界;属于在编译期间分析应该在运行期间的数据流;节省了很多次的条件判断;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯是国内最有影响力的计算机比赛之一,旨在培养和选拔优秀的计算机专业人才。对于Java语言的考察能力是其中重要的一部分。 参加蓝桥杯Java比赛需要掌握的知识点主要包括以下几个方面: 1. 基础语法:掌握Java的基本语法,包括变量定义、数据类型、运算符、流程控制结构等。比赛中常会有编写简单程序的题目,要求学生能处理好基本语法的运用。 2. 面向对象:理解面向对象的思想,熟悉类和对象的定义与使用。熟悉Java中的封装、继承和多态等概念,并能熟练运用。 3. 数据结构:重点掌握Java中常用的数据结构,如数组、链表、栈、队列、树等。了解它们的特点、用途以及相应的操作方法,能够根据问题的需求选择合适的数据结构进行解决。 4. 异常处理:熟悉Java中的异常处理机制,掌握如何使用try-catch语句捕获和处理异常。在代码编写过程中,合理运用异常处理来增加程序的健壮性。 5. 输入输出:能够熟练运用Java的输入输出流,包括文件读写、标准输入输出、网络通信等。理解输入流和输出流的概念,并能够根据不同的需求选择合适的输入输出方式。 6. 网络编程:掌握Java的Socket编程,了解网络通信的基本原理和常用的协议。能够编写简单的网络程序,进行客户端和服务器的通信。 以上是蓝桥杯Java比赛所涉及的主要知识点,参赛选手应该全面了解这些知识点,并通过大量的练习和实践来提高自己的实际应用能力。当然,还需要具备良好的编程习惯和解决问题的能力,才能在比赛中取得好成绩。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值