Code Monkey home page Code Monkey logo

learningnotes's Introduction

LearningNotes


第一部分:



第二部分


第三部分


第四部分


第五部分

第六部分



有任何问题欢迎联系: [email protected]

欢迎关注我的知乎账号:

Francis的知乎

微信公众号:

陶程

微博账号:

Francis的微博

已同步到 http://www.diycode.cc/wiki/androidinterview

拒绝任何形式的商业用途。

learningnotes's People

Contributors

akuma avatar anangryant avatar fanrunqi avatar francistao avatar hatcloud avatar icodeu avatar myrao avatar nhtzj avatar tanglie1993 avatar xuyushi avatar zubinxiong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learningnotes's Issues

404错误

使用wait/notify/notifyAll实现线程间通信,404错误

Java基础

8种基本数据类型其中一个是char 不是character吧

Bitmap的分析与使用 关于recycle()的描述有误

虽然recycle()方法可以提前释放Bitmap占用的内存,但是不调用recycle()并不会造成内存泄漏。此方法的文档如下,注意最后一句:
Free the native object associated with this bitmap, and clear the reference to the pixel data. This will not free the pixel data synchronously; it simply allows it to be garbage collected if there are no other references. The bitmap is marked as "dead", meaning it will throw an exception if getPixels() or setPixels() is called, and will draw nothing. This operation cannot be reversed, so it should only be called if you are sure there are no further uses for the bitmap. This is an advanced call, and normally need not be called, since the normal GC process will free up this memory when there are no more references to this bitmap.
https://developer.android.com/reference/android/graphics/Bitmap.html#recycle()

该文章中Set<Person>中对象的属性变了之后,还是3个对象,并不像文章说的那样变成了4个

public static void main(String[] args)
{
Set set = new HashSet();
Person p1 = new Person("唐僧","pwd1",25);
Person p2 = new Person("孙悟空","pwd2",26);
Person p3 = new Person("猪八戒","pwd3",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素!
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变

set.remove(p3); //此时remove不掉,造成内存泄漏

set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素!
for (Person person : set)
{
System.out.println(person);
}
}

把这段代码全部copy出来,亲自测试运行,打印的结果都是3个!

Android内存泄漏问题

public static void main(String[] args)
{
Set<Person> set = new HashSet<Person>();
Person p1 = new Person("唐僧","pwd1",25);
Person p2 = new Person("孙悟空","pwd2",26);
Person p3 = new Person("猪八戒","pwd3",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素!
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变

set.remove(p3); //此时remove不掉,造成内存泄漏

set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素!
for (Person person : set)
{
System.out.println(person);
}
}

这个例子中修改属性值,后从集合中移除,文档标注为不能移除。实际是可以移除的,亲测
正确方式为

p3 = new Person("","","");
set.remove(p3);//此时无法移除

楼主很用心的总结了,希望能修改这个小瑕疵

Bitmap的分析与使用中有错误

//这里我们为什么要寻找 与ratio最接近的2的倍数呢?
//原因就在于API中对于inSimpleSize的注释:最终的inSimpleSize应该为2的倍数,我们应该向上取与压缩比最接近的2的倍数。
以上为错误
根据google官方文档
int inSampleSize
If set to a value > 1, requests the decoder to subsample the original image, returning a smaller image to save memory. The sample size is the number of pixels in either dimension that correspond to a single pixel in the decoded bitmap. For example, inSampleSize == 4 returns an image that is 1/4 the width/height of the original, and 1/16 the number of pixels. Any value <= 1 is treated the same as 1. Note: the decoder uses a final value based on powers of 2, any other value will be rounded down to the nearest power of 2.
最后一句的意思为inSimpleSize应该为2的幂(比如说2,4,8.....),当不是2的幂的时候将会取小于它最近的2的幂(比如说3取2,6取4)。而非文中所说的2的倍数

工具

大哥 能问下你这是用什么工具写这样的文件然后上传到github上呢?

关于Handler导致内存泄漏问题

根据博主的写法,handler handler = new Handler(){
@OverRide
public void handleMessage(Message msg){
...
}
}
是因为handler发送的Message持有handler对象,message对象被Looper持有,Looper生命周期一直存在导致handler在对应的message被处理完之前不会被释放,那么handler是如何持有到Activity的引用的呢,是匿名内部类吗,Handler的类定义是一Public class Handler,并不是抽象类,如何有匿名内部类一说呢,只有一个构造方法Handler(Callback),其中Callback是Handler内部的一个接口,照理应该是传进去一个匿名Callback内部类,查到可能是一种叫做参数式内部类的写法,但是就算是这样,写法也应该是类似于
handler handler = new Handler(){new Callback(){
@OverRide
public void handleMessage(Message msg){
...
}
}
}
的写法吧,看到Thread也是同理,有一个Thread(Runnable)构造函数,写法也是类似,不是很明白这一部分,请博主解答一下,谢谢。

two-sum理解题目有误

LearningNotes/Part3/Algorithm/LeetCode/two-sum.md

题目的意思应该是:一个整数数组,找到2个数字,他们的和正好为一特定的数。功能是返回这两个数字的对应索引号。index1必须小于index2,而且回答的index不是从0开始的。

thanks

Question

Given an array of integers, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
题目大意:

给定一个整数数组,找到2个数字,这样他们就可以添加到一个特定的目标号。功能twosum应该返回两个数字,他们总计达目标数,其中index1必须小于index2。请注意,你的答案返回(包括指数和指数)不为零的基础。你可以假设每个输入都有一个解决方案。
输入数字numbers= { 2,7,11,15 },目标= 9输出:index1 = 1,index2= 2

内存泄露问题

你好,看见了内存泄露的问题,有一个疑问,c++中有析构函数来处理引用,Java中要自己写一个方法来处理各种成员引用吗? 匿名内部类本来是为了书写方便,但是在addXXLinster中可能会造成OOM,此时需要显示的声明,然后remove掉,虽然会减少OOM,但是否增加了写代码的困难?比如有很多事件需要监听?

java中的内存泄漏 中说明有问题

2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。

public static void main(String[] args)
{
Set<Person> set = new HashSet<Person>();
Person p1 = new Person("唐僧","pwd1",25);
Person p2 = new Person("孙悟空","pwd2",26);
Person p3 = new Person("猪八戒","pwd3",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素!
**p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变

set.remove(p3); //此时remove不掉,造成内存泄漏**

set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素!
for (Person person : set)
{
System.out.println(person);
}
}

==============================
以上:
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变
set.remove(p3); //此时remove不掉,造成内存泄漏

这两句的注释是错误的,修改p3的年龄并不会让p3对应的hashcode值发生变化;set.remove(p3); 也是可以从set中删除掉p3对象的。

Android内存泄露总结那篇

关于“当集合里面的对象属性被修改后,再调用remove()方法时不起作用。”
本地跑了代码,并不会出现文中描述的情况。
可以remove 改变属性的对象

关于github上项目

您好,您上传的安卓面试题,编码格式能改一下吗,下载到本地文件名都是乱码,谢了!

个人在学习后,对JVM板块排版上的一个小小建议

JVM(Java虚拟机)
*JVM基础知识
*JVM类加载机制
*Java内存区域与内存溢出
*垃圾回收算法
这是作者的排版,但是我一整个看下来后其实感觉知识被分得非常零碎,因为在JVM基础知识篇里有提到的各种知识点,如gc的两种判定算法之类,都被分得很散,建议都收集在下边的垃圾回收算法板块。(类似的还有JAVA内存区域,挺多重复的,各种知识混在一块)。相比之下,Android部分每个知识点排版就非常清晰明了。

Android内存泄漏总结 例子的问题

讲解栈与堆的区别用的例子

public class Sample {
int s1 = 0;
Sample mSample1 = new Sample();

public void method() {
    int s2 = 1;
    Sample mSample2 = new Sample();
}

}

mSample1 不能直接在声明全局变量的时候创建,这样会无限调用然后内存溢出,
虽然只是个为了说明堆栈的例子,但还是希望能改一下

onSaveInstanceState

有a、b两个Activity,当从a进入b之后一段时间,可能系统会把a回收,这时候按back,执行的不是a的onRestart而是onCreate方法,a被重新创建一次,这是a中的临时数据和状态可能就丢失了。绝对不走Oncreate方法、lz还是考虑考虑边实践边写文章吧

关于内存泄漏中的问题

对于集合中容易内存泄漏的问题,经过亲测并不会出现文中所说的情况.

public static void main(String[] args)
{
Set<Person> set = new HashSet<Person>();
Person p1 = new Person("唐僧","pwd1",25);
Person p2 = new Person("孙悟空","pwd2",26);
Person p3 = new Person("猪八戒","pwd3",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素!
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变

set.remove(p3); //此时remove不掉,造成内存泄漏

set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素!
for (Person person : set)
{
System.out.println(person);
}
}

这里并不会出现hashCode()值不同的情况,请博主确认一下是否是编写Person类时对hashCode()进行了重写?比如根据年龄进行了重新计算?默认情况下Person继承自Object,而不重写hashCode()的情况下使用的是Object.hashCode(),这时应该是通过引用对象的地址去计算得到的hashCode()吧?只要对象地址不变结果应该是不变的.

这里博主没有给出Person类的实现,亲测时并没有重写hashCode()方法.虽然集合中这个是很有可能发生的,但是应该是基于重写了hashCode()的类特别需要注意,对于地址不变的类还是不会有任何差别的,是可以正常移除和添加的.

以下为输出结果:(未重写hashCode()方法)

总共有:3 个元素!
总共有:3 个元素!
Main$Person@610455d6
Main$Person@60e53b93
Main$Person@511d50c0

缺少判断条件

出错位置:
Part1/DesignPattern/单例模式.md
问题描述:
双重检查模式中没有第二次对instance非空的判断,多线程下可能会出现线程安全问题。

anr那篇

LeakCanary 是检测内存泄漏的,,,

基本的写法错误

在《Android 内存泄漏总结》中的栈与堆的区别一节中的代码示例中

`public class Sample() {
int s1 = 0;
Sample mSample1 = new Sample();

public void method() {
    int s2 = 1;
    Sample mSample2 = new Sample();
}

}

Sample mSample3 = new Sample();`

Sample类的定义有错误,多了()。请修改!

关于内存泄漏中的问题

对于集合中容易内存泄漏的问题,经过亲测并不会出现文中所说的情况.

public static void main(String[] args)
{
Set<Person> set = new HashSet<Person>();
Person p1 = new Person("唐僧","pwd1",25);
Person p2 = new Person("孙悟空","pwd2",26);
Person p3 = new Person("猪八戒","pwd3",27);
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:3 个元素!
p3.setAge(2); //修改p3的年龄,此时p3元素对应的hashcode值发生改变

set.remove(p3); //此时remove不掉,造成内存泄漏

set.add(p3); //重新添加,居然添加成功
System.out.println("总共有:"+set.size()+" 个元素!"); //结果:总共有:4 个元素!
for (Person person : set)
{
System.out.println(person);
}
}

这里并不会出现hashCode()值不同的情况,请博主确认一下是否是编写Person类时对hashCode()进行了重写?比如根据年龄进行了重新计算?默认情况下Person继承自Object,而不重写hashCode()的情况下使用的是Object.hashCode(),这时应该是通过引用对象的地址去计算得到的hashCode()吧?只要对象地址不变结果应该是不变的.

这里博主没有给出Person类的实现,亲测时并没有重写hashCode()方法.虽然集合中这个是很有可能发生的,但是应该是基于重写了hashCode()的类特别需要注意,对于地址不变的类还是不会有任何差别的,是可以正常移除和添加的.

以下为输出结果:(未重写hashCode()方法)

总共有:3 个元素!
总共有:3 个元素!
Main$Person@610455d6
Main$Person@60e53b93
Main$Person@511d50c0

纠正一个Activity的常识错误

image

用singleTop或者singleTask或singleInstance,这里的生命周期并非原文描述的那样,只走onNewIntent()回调。
而正确的生命周期是:onNewIntent——onRestart——onStart——onResume。

Android怎么加速启动Activity中有问题

A 启动B 时不要在 A 的 onPause 中执行耗时操作。因为 B 的 onResume 方法必须等待 A 的 onPause 执行完成后才能运行为 错误。根据onPause() google官方文档 When activity B is launched in front of activity A, this callback will be invoked on A. B will not be created until A's onPause() returns, so be sure to not do anything lengthy here. 应该是A的onPause()执行完之后B的onCreate()方法才执行而不是onResume()

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.