您的位置:首页 > 职场人生

复习1

2018-03-14 11:12 99 查看
1.  Pracelable和Seraliable的区别
俩者都能实现序列化数据,将内存的数据转化成字节,把Java对象信息保存到存储媒介,所有当对象不存在时依然可以使用这个对象;反序列化相反。
Pracelable于内存中读写而Serialable在IO中读写,一般情况下选择读写速度较快的Praceable。
 
2.  多进程的应用—调试方法可参看http://blog.csdn.net/SEU_Calvin/article/details/53932171
多模块应用。如应用大而全,里面肯定会有很多模块,假如有地图模块、大图浏览、自定义WebView等等(这些都是吃内存大户),一个成熟的应用一定是多模块化的。首先多进程开发能为应用解决了OOM问题,因为Android对内存的限制是针对于进程的,所以,当我们需要加载大图之类的操作,可以在新的进程中去执行,避免主进程OOM。而且假如图片浏览进程打开了一个过大的图片,java heap 申请内存失败,该进程崩溃并不影响我主进程的使用。
坏处:消耗用户的电量,多占用了系统的空间,需要合理使用
 
3.  堆栈
堆:程序运行时申请的空间,动态分配大小,存取速度较慢,但可以动态地分配内存大小,生存期到了被自动回收,存储动态数据如new等自定义内存变量, 简单类型(int,char等8种,不包含string)都是在堆中分配内存
栈:Stack,建立线程或进程分配的存储空间,编译的时候可以指定大小,数据可以共享,销毁创建块,效率高,是堆的一种使用方法,先进后出的原则。存储局部变量
静态区域:存储全局变量
在Java中所有的对象(包括int的wrapper  Integer)都是在堆中分配的,但是这个对象的引用却是在Stack中分配。也就是说在建立一个对象时从两个地方都分配内存,在Heap中分配的内存实际建立这个对象,而在Stack中分配的内存只是一个指向这个堆对象的指针(引用)而已。



public class Main{ 
int a = 1; // a 和1 都在堆里 
Student s = new Student();// s 和new d的Student()都在 堆里  
public void XXX(){  
int b = 1;//b 和 1 栈里面  
Student s2 = new Student();// s2 在栈里, new的 Student() 在堆里  
}
}
基本数据类型和对象的值传递和引用传递class MyObj {
    public String a = "str";
    public int b = 10;
}

public class Test {
    public static void main(String[]args) {
    Test t = new Test();
    String a = "str";
    t.test1(a);//这里传递的参数a就是按值传递
    Log.e("test_log_end", a + "");
    System.out.println(a);

    StringBuffer b=new StringBuffer("str");
    t.test2(b);//这里传递的参数obj就是引用传递
    Log.e("test_log_end", b + "");
    System.out.println(b);
}

    public void test1(String str) {
        str = str+"ing";
        Log.e("test_log", str + "");
        System.out.println(str);
    }

    public void test2(StringBuffer str) {
        str = str.append("ing");
        Log.e("test_log", str + "");
        System.out.println(str);
    }
}
E/test_log:str ing
E/test_log_end:str
E/test_log:str ing
E/test_log_end: str ing
--------------------------------------------分割-----------------------------------------------------class MyObj {
    public String a = "str";
    public int b = 10;
}
public class TestB {

    public static void main(String[] args) {
        TestB t = new TestB();
        int a = 99;
        t.test1(a);//这里传递的参数a就是按值传递
        System.out.println(a);
        Log.e("test_log_end", a + "");

        MyObj obj = new MyObj();
        t.test2(obj);//这里传递的参数obj就是引用传递
        System.out.println(obj.b);
        Log.e("test_log_end", obj.b + "");
    }

    public void test1(int b) {
        b = ++b;
        Log.e("test_log", b + "");
        System.out.println(b);
    }

    public void test2(MyObj obj) {
        obj.b = 100;
        Log.e("test_log", obj.b + "");
        System.out.println(obj.b);
    }
}
E/test_log:100
E/test_log_end
9ea9
:99
E/test_log:100
E/test_log_end:100
 
4.  启动模式
singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
singleTask 栈内复用模式,适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。
singleInstance适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A-> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。独立于其他启动模式的activity的栈中   如A->B(SingleInstance)->C时,在C返回会直接到A

5. https和http简单比较
HTTPS= HTTP + SSL
HTTPS在 HTTP 应用层的基础上使用安全套接字层作为子层。
HTTP用来通过互联网传输和接收信息的协议,使用请求/响应的过程,因此信息可在服务器间快速、轻松而且精确的进行传输。当你访问 Web 页面的时候你就是在使用 HTTP 协议,但 HTTP 是不安全的,可以轻松对窃听你跟 Web 服务器之间的数据传输
HTTP的 URL 以 http:// 开头,而HTTPS 的 URL 以 https:// 开头
HTTP是不安全的,而 HTTPS 是安全的
HTTP标准端口是 80 ,而 HTTPS 的标准端口是443
在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层
HTTP无需加密,而 HTTPS 对传输的数据进行加密
HTTP无需证书,而 HTTPS 需要认证证书
 
6.  String StringBuffer StringBuild区别
如果要操作少量的数据,用String ;单线程操作大量数据,用StringBuilder ;多线程操作大量数据,用StringBuffer。
不要使用String类的"+"来进行频繁的拼接,因为那样的性能极差的,应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则
StringBuilder一般使用在方法内部来完成类似"+"功能,因为是线程不安全的,所以用完以后可以丢弃。StringBuffer主要用在全局变量中。

7.解决ScrollView与Viewpager和ListView冲突问题
动态计算listview的高度 然互设置 首先从listviewgetAdapter  遍历adapter中的view 测量高度 累加 然后设置给listview  Viewpager 也是动态设置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 面试 java基础