2020 안드로이드 면접 총결산 - 02

4998 단어 Android면접 시험
volatile 키워드
자바 언어는 변수의 업데이트 작업을 다른 라인에 알릴 수 있도록 약한volatile 변수를 제공합니다.
변수가 volatile로 정의되면 다음과 같은 두 가지 특성이 있습니다.
1. 이 변수가 모든 라인에 대한 가시성을 확보한다. 이곳의'가시성'은 한 라인이 이 변수의 값을 수정하면volatile는 새로운 값이 메인 메모리에 즉시 동기화되고 매번 사용하기 전에 메인 메모리에서 리셋될 수 있도록 보장한다.그러나 일반 변수는 이 점을 하지 못한다. 일반 변수의 값은 온라인 스레드에서 모두 메인 메모리를 통해 CPU 캐시로 복사해서 완성해야 한다.
2. 명령 재배열 최적화를 금지한다.volatile 장식된 변수가 있습니다. 값을 부여한 후에'loadaddl $0x0, (%esp) '동작을 실행했습니다. 이 동작은 메모리 장벽에 해당합니다. (명령을 다시 정렬할 때 뒤의 명령을 메모리 장벽 이전의 위치로 정렬할 수 없습니다.) CPU가 메모리에 접근할 때만 메모리 장벽이 필요하지 않습니다.(명령 순서 재정리란 무엇인가: CPU가 프로그램이 정한 순서에 따라 여러 명령을 나누어 각 회로 단원에 보내는 것을 허용하는 것을 말한다).
volatile 성능:
volatile의 읽기 성능 소모는 일반 변수와 거의 같지만, 쓰기 동작은 약간 느리다. 로컬 코드에 많은 메모리 장벽 명령을 삽입해서 프로세서가 질서정연하게 실행되지 않도록 해야 하기 때문이다.
Java 동시 프로그래밍 참조:volatile 키워드 확인
스레드 보안 단일 모드
주로 이전 문제를 이어서volatile과synchronizede 키워드를 고찰한다.코드 실행 효율을 향상시키고 스레드 보안을 위해 DCL(Double Check Locking Dual Checking Locking Locking Mechaning)의 Dual Check Locking Mechaning Mechaning Mechaning 을 사용하여 다음과 같은 코드를 구현할 수 있습니다.
public class MySingleton {
	
	//  volatile        
	volatile private static MySingleton instance = null;
	//        ,            
	private MySingleton(){}
	
	public static MySingleton getInstance() { 
	    if(instance == null){
			synchronized (MySingleton.class) {
				if(instance == null){//    
					instance = new MySingleton();
				}
			}
	     }
		return instance;
	}
}

참고 자료https://blog.csdn.net/cselmu9/article/details/51366946
두 갈래 나무의 최대 깊이를 구하다
두 갈래 나무의 최대 깊이를 구하다
Synchronized 및 ReentantLock
https://blog.csdn.net/zxd8080666/article/details/83214089
공평 자물쇠와 비공평 자물쇠 등
lock     ,FIFO;
    :           lock     ,    。

https://www.jianshu.com/p/d86faec4baa1
약인용과 소프트인용, 그리고 각자의 회수 시기
억지로 인용하다
정상적으로 정의된 대상 인용.회수 조건:참조되지 않음
비고정 참조(WeakReference)
asynctask 메모리 유출 문제를 해결하는 데 사용할 수 있습니다.다른 acitivty를 전환할 때, 이 actity가 destory가 되면 회수해야 합니다.이때 우리가 약한 인용을 사용하면 회수되지 않도록 방지할 수 있다.회수 조건: 일반적으로 약한 인용과 동시에 이 대상도 강하게 인용될 수 있습니다.만약 이 인용이 사라진다면 시스템은 인용을 회수하기 시작할 것이다.
소프트 참조(SoftReference)
메모리가 부족할 때 다른 대상을 위해 메모리를 방출할 수 있다.회수 조건: 메모리가 부족할 때 회수
거짓 참조(PhantomReference)
수시로 회수하여 용도가 불분명하다.회수 조건: 무조건, 수시로 회수.
강,약,연,허인용 회수 시기
Java:고정 참조, 소프트 참조, 고정 및 거짓 참조
List 요소에서 객체 제거 방법
순환 문장에서 집합 중의 원소를 삭제하려면, 교체기iterator의remove () 방법을 사용해야 한다. 왜냐하면,remove () 방법은 원소를 삭제할 뿐만 아니라, 현재 삭제할 수 있는 상태인지 표시하기 위해서도 사용할 수 있기 때문이다. 예를 들어, 두 번 연속으로remove () 방법을 호출할 수 없기 때문에, 호출하기 전에 최소한 한 번의next () 방법을 호출할 수 있다.
List에서 객체를 올바르게 제거합니다.
List 컬렉션에서 객체를 삭제하는 방법
서비스는 어떤 시작 방식이 있고, 차이는 무엇입니까?
https://www.jianshu.com/p/4c798c91a613
IntentService
IntentService와 Service의 차이점
안드로이드 메시지 메커니즘
https://blog.csdn.net/haoxuhong/article/details/80103030
sendMessage와sendMessageDelay, 후자는 어떻게 delay를 실현했는가
안드로이드 메시지 처리 메커니즘의 3:Handler에서sendMessage() 소스 코드 분석

좋은 웹페이지 즐겨찾기