基础知识

一、Java篇

1.java中的8种基本数据类型

         四种整数类型:byte  8位   short  16位   int  32位  long 64位

         两种浮点型: float  32位  23位有效尾数   double  64位   52位有效尾数

         一种字符类型  char  16位  是整数类型

         一种布尔类型  true/false

2.== 和 equals有什么区别

        ==在比较基本数据类型时是比较的两者的值,在比较引用数据类型时是比较的两者的地址

        equals比较引用数据类型在不重写的情况下是比较的地址,重写equals方法根据逻辑去判断

3.List和Set的区别

        List是单列集合,是按add的顺序存储,元素可以有索引,元素可重复

        Set是双列集合,是无序存储,以键值对的形式存储,其中key不能重复,只能通过迭代器获取元素

4.位运算符

        与&  或|  非! 异或^(同为假 异为真)

5.网络协议


1.应用层

        应用层决定了向用户提供应用服务时通信的活动。

        TCP/IP 协议族内预存了各类通用的应用服务。例如:HTTP、SSH、FTP 等。

2.传输层

        应用层的下一层就是传输层,提供处于网络连接中的两台计算机之间的数据传输

常见的传输层协议有 TCP、UDP 等。

 3.网络层

        网络层又称网络互连层。

        网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方的计算机,并把数据包传送给对方。

        网络层的作用就是在众多选项内选择一条合适的传输路径。

4.链路层

        链路层又称数据链路层,网络接口层

        用来处理连接网络的硬件部分,控制操作系统、硬件的设备驱动。

        我们能够看到的交换机、网线、光纤等也属于物理层


TCP(有链接的协议)与UDP(无连接的协议)

        三次握手:


A为client端B为Server

      第一次握手:A端向B端发送数据包,B确认A的发送功能正常,B确认自己的接收功能正常

      第二次握手:B向A发送数据,A确认自己的发送功能和接收功能正常,A确认B的发送功能和接收功能正常

       第三次握手:A向B发送数据,B确认自己的发送功能和接收功能正常,B确认A的发送功能和接收功能正常

经过三次握手双方都知道对方的接收和发送功能都正常,少一次双方都不明确,多一次就是浪费

        四次挥手:


TCP和UDP的区别


6.HashMap和HashTable的区别

hashMap线程不安全,hashTable线程安全


7.设计模式

        设计模式:是软件架构、实现思路,一方面便于后期扩展,二方面便于研发。

        设计模式的六大原则:

         1.单一原则    一个类只负责一项职责

         2.里斯替换原则    子类可以扩展父类的功能,但不能改变父类原有的功能

         3.依赖倒置原则    面向接口编程

         4.接口隔离原则   一个类依赖一个接口,里面的抽象方法都要用到,否则重新创建一个

         5.迪米特法则    一个对象应该保持对另外一个对象最少的了解

         6.开闭原则    对扩展开放,对修改关闭

单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计接口的时候要精简单一;迪米特法则告诉我们要降低耦合。而开闭原则是总纲,他告诉我们要对扩展开放,对修改关闭。


8.排序

选择排序


选择排序.png

冒泡排序


9.Glide的源码

Glide.with().load().into();

.with()有很多重载的方法;这个方法比较简单就是获取RequestManager对象,然后根据with()传入的参数不同,Activity Fragment Application绑定不同的生命周期。

.load();就是先调用了fromString()方法,再调用load()方法,然后把传入的图片URL地址传进去。而fromString()方法也极为简单,就是调用了loadGeneric()方法,并且指定参数为String.class,因为load()方法传入的是一个字符串参数。loadGeneric()方法是要返回一个DrawableTypeRequest对象的DrawableTypeRequest的父类是DrawableRequestBuilder,DrawableRequestBuilder中有很多个方法,这些方法其实就是Glide绝大多数的API了,比如说placeholder()方法、error()方法、diskCacheStrategy()方法、override()方法等。也就是说,最终load()方法返回的其实就是得到DrawableTypeRequest对象。

.into();进行数据初始化,然后使用httpconnect进行网络请求,然后判断是gif动画还是Drawable静态图片,最后将图片资源取出来赋值给imageview

Glide使用了Lrucache算法的三级缓存

10.Eventbus的源码

Eventbus.getDefault(),创造了一个Eventbus的单利,

register()通过注册的类,找到所有订阅的方法保存在一个list中,然后将订阅者和订阅方法封装成一个Subscription对象,并将订阅者作为key,订阅者所有event事件作为value存入到一个map集合中,register()和unregister()其实就是操作这个map。

post()根据事件获取订阅者然后通过反射执行订阅者的订阅方法。

你可能感兴趣的:(基础知识)