JavaRush /Blog Jawa /Random-JV /Tingkat 37. Wangsulan pitakonan wawancara babagan topik t...
lichMax
tingkat
Санкт-Петербург

Tingkat 37. Wangsulan pitakonan wawancara babagan topik tingkat

Diterbitake ing grup
Halo. Maneh, aku uga ora nemokake jawaban kanggo pitakonan kasebut. Aku mutusake kanggo ngirim jawaban sing dak susun dhewe. Level 37. Wangsulan pitakonan wawancara babagan topik level - 1Mangkene pitakonan sing nyata: Pitakonan kanggo wawancara:
  1. Apa pola desain?
  2. Apa pola desain sing sampeyan ngerti?
  3. Marang kita babagan pola Singleton? Carane nggawe thread aman?
  4. Marang kita babagan pola Pabrik?
  5. Marang kita babagan pola AbstractFactory
  6. Marang kita bab pola Adaper, beda saka Wrapper?
  7. Marang kita babagan pola Proxy
  8. Apa iterator? Apa antarmuka sing ana gandhengane karo iterator sing sampeyan ngerti?
  9. Napa kita butuh kelas Arrays?
  10. Napa kita butuh kelas Koleksi?
Mangkene jawabanku: Jawabanku:
  1. Pola desain wis mantep, solusi sukses kanggo masalah sing paling umum sing muncul sajrone desain lan pangembangan program utawa bagean.

  2. Singleton, Factory, Abstract Factory, Template method, Strategy, Pool, Adapter, Proxy, Bridge. MVC_

  3. Yen sampeyan butuh mung siji conto kelas sing ana ing program, pola kasebut digunakake Singleton. Katon kaya iki (inisialisasi malas):

    clas Singleton {
    	private Singleton instance;
    
    	private Singleton() {}
    
    	public static Singletot getInstance() {
    		if (instance == null)
    			instance = new Singleton();
    		return instance;
    	}
    }

    Kanggo nggawe thread aman, sampeyan bisa nambah getInstance()modifier kanggo cara synchronized. Nanging iki ora bakal dadi solusi sing paling apik (nanging sing paling gampang). Solusi sing luwih apik yaiku nulis metode getInstancekanthi cara iki (kunci sing dicenthang kaping pindho):

    public static synchronized Singleton getInstance() {
    	if (instance == null)
    		synchronized(Singleton.class) {
    			instance = new Singleton();
    		}
    	return instance;
    }

  4. Pola Factoryminangka pola generatif. Iku ngijini sampeyan kanggo nggawe obyek ing dikarepake (contone, ing kahanan tartamtu). Katon kaya mangkene:

    class Factory{
    	public static Object1 getObject1() {
    		return new Object1();
    	}
    
    	public static Object2 getObject2() {
    		return new Object2();
    	}
    
    	public static Object3 getObject3() {
    		return new Object3();
    	}
    }

    Ana uga variasi pola iki sing diarani FactoryMethod. Miturut pola iki, obyek sing beda digawe ing siji cara, gumantung saka data input sing mlebu (nilai parameter). Kabeh obyek kasebut kudu duwe leluhur sing umum (utawa antarmuka sing bisa ditindakake umum). Katon kaya mangkene:

    class FactoryMethod {
    	public enum TypeObject {
    		TYPE1,
    		TYPE2,
    		TYPE3
    	}
    
    	public static CommonClass getObject(TypeObject type) {
    		switch(type) {
    			case TYPE1:
    				return new Object1();
    			case TYPE2:
    				return new Object2();
    			case TYPE3:
    				return new Object3();
    			default:
    				return null;
    		}
    	}
    }

    Kelas Object1, Object2lan Object3warisan saka kelas CommonClass.

  5. Pola Abstract Factoryuga minangka pola desain generatif. Miturut pola iki, pabrik abstrak digawe sing dadi cithakan kanggo sawetara pabrik beton. Iki contone:

    class Human {}
    
    class Boy extends Human {}
    class TeenBoy extends Human {}
    class Man extends Human {}
    class OldMan extends Human {}
    
    class Girl extends Human {}
    class TeenGirl extends Human {}
    class Woman extends Human {}
    class OldWoman extends Human {}
    
    interface AbstractFactory {
    	Human getPerson(int age);
    }
    
    class FactoryMale implements AbstractFactory {
    	public Human getPerson(int age) {
    		if (age < 12)
    			return new Boy();
    		if (age >= 12 && age <= 20)
    			return new TeenBoy();
    		if (age > 20 && age < 60)
    			return new Man();
    		return new OldMan();
    	}
    }
    
    сlass FactoryFemale implements AbstractFactory {
    	public Human getPerson(int age) {
    		if (age < 12)
    			return new Girl();
    		if (age >= 12 && age <= 20)
    			return new TeenGirl();
    		if (age > 20 && age < 60)
    			return new Woman();
    		return new OldWoman();
    	}
    }

  6. Pola Adapterminangka pola struktural. Implementasine ngidini obyek saka siji jinis bisa digunakake ing ngendi obyek saka jinis liyane dibutuhake (biasane jinis abstrak). Tuladha implementasine pola iki:

    interface TotalTime {
    	int getTotalSeconds();
    }
    interface Time {
    	int getHours();
    	int getMinutes();
    	int getSeconds();
    }
    
    class TimeAdapter extends TotalTime {
    	private Time time;
    	public TimeAdapter(Time time) {
    		this.time = time;
    	}
    	public int getTotalTime() {
    		return time.getSeconds + time.getMinutes * 60 + time.getHours * 60 * 60;
    	}
    }
    
    class TotalTimeAdapter extends Time {
    	private TotalTime totalTime;
    	public TotalTimeAdapter(TotalTime totalTime) {
    		this.totalTime = totalTime;
    	}
    
    	public int getSeconds() {
    		return totalTime % 60;
    	}
    
    	public int getMinutes() {
    		return (totalTime / 60) % 60;
    	}
    
    	public int getHours() {
    		return totaltime/ (60 * 60) ;
    	}
    }
    
    class Main {
    	public static void main(String[] args) {
    		Time time = new Time() {
    			public int getSeconds() {
    				return LocalTime.now().getSecond();
    			}
    
    			public int getMinutes() {
    				return LocalTime.now().getMinute();
    			}
    
    			public int getHours() {
    				return LocalTime.now().getHour() ;
    			}
    		};
    
    		TotalTime totalTime = new TimeAdapter(time);
    		System.out.println(totalTime.getTotalSeconds());
    
    		TotalTime totalTime2 = new TotalTime() {
    			public int getTotalSeconds() {
    				LocalTime currTime = LocalTime.now();
    				return currTime.getSecond() + currTime.getMinute * 60 + currTime.getHour * 60 * 60;
    			}
    		};
    
    		Time time2 = new TotalTimeAdapter(totalTime2);
    		System.out.println(time2.getHours + ":" + time2.getMinutes() + ":" + time2.getSeconds());
    	}
    }

    Nalika ngleksanakake pola Wrapper, kelas digawe sing mbungkus kelas asli lan ngleksanakake antarmuka sing padha karo kelas asli. Mangkono, iku ngijini sampeyan kanggo ngluwihi fungsi saka kelas asli lan nggunakake kelas anyar ngendi kelas asli wis samesthine kanggo digunakake. Iki beda karo ngleksanakake pola Adaptering kasus iki antarmuka siji digunakake (padha kelas asli). Pola Adapternggunakake rong antarmuka, lan kelas sing mbungkus conto saka kelas asli ngleksanakake antarmuka temen beda, ora antarmuka saka kelas asli.

  7. Pola Proxyminangka pola desain struktural. Perlu kanggo ngontrol akses menyang sawetara obyek. Kanggo nindakake iki, kelas saka jinis "wrapper" ditulis, yaiku, obyek asli sing ngleksanakake antarmuka tartamtu dilewati ing kelas, kelas kasebut uga ngetrapake antarmuka iki, lan ing saben metode kelas iki cara sing padha. diarani obyek asli. Ngleksanakake antarmuka sing padha karo obyek asli ngidini sampeyan ngganti obyek asli karo obyek proxy. Iki uga ngidini, tanpa ngganti obyek asli, kanggo "masang" sawetara fungsi tambahan khusus kanggo cara (contone, logging, mriksa hak akses, caching, etc.). Tuladha:

    interface Bank {
    	void setUserMoney(User user, double money);
    	double getUserMoney(User user);
    }
    
    class CitiBank implements Bank { //оригинальный класс
    	public void setUserMoney(User user, double money) {
    		UserDAO.update(user,money);
    	}
    
    	public double getUserMoney(User user) {
    		UserDAO.getUserMoney(user);
    	}
    }
    
    class SecurityProxyBank implements Bank {
    	private Bank bank;
    
    	public SecurityProxyBank(Bank bank) {
    		this.bank = bank;
    	}
    
    	public void setUserMoney(User user, double money) {
    		if (!SecurityManager.authorize(user,BankAccounts.Manager)
    			throw new SecurityException("User can't change money value");
    
    		UserDAO.update(user,money);
    	}
    
    	public double getUserMoney(User user) {
    		if (!SecurityManager.authorize(user,BankAccounts.Manager)
    			throw new SecurityException("User can't get money value");
    
    		UserDAO.getUserMoney(user);
    	}

  8. Iterator minangka obyek internal khusus saka koleksi sing ngidini sampeyan ngulang unsur-unsur koleksi iki. Objek iki kudu ngetrapake antarmuka Iterator<E>, utawa ListIterator<E>(kanggo dhaptar). Uga, supaya bisa ngulang unsur-unsur koleksi, koleksi kasebut kudu ndhukung Iterable<E>. Antarmuka Iterable<E>mung ngemot siji cara iterator(), sing ngidini sampeyan ngakses iterator koleksi saka njaba.

    Antarmuka Iterator<E>ngemot cara ing ngisor iki:

    • boolean hasNext()- mriksa apa ana unsur liyane ing koleksi

    • E next()- ngidini sampeyan entuk unsur koleksi sabanjure (sawise nampa unsur kasebut, kursor iterator internal pindhah menyang unsur koleksi sabanjure)

    • void remove()- mbusak unsur saiki saka koleksi

    Интерфейс же ListIterator<E> содержит такие методы:

    • boolean hasNext() — проверяет, существуют ли ещё один элемент в коллекции (следующий за текущим)

    • E next() — возвращает очередной элемент коллекции (и передвигает внутренний курсок итератора на следующий элемент)

    • int nextIndex() — возвращает индекс следующего element

    • void set(E e) — устанавливает meaning текущего element void add(E e). Добавляет элемент в конец списка.

    • boolean hasPrevious() — проверяет, существует ли Howой-то элемент в коллекции перед данным элементом

    • E previous() — возвращает текущий элемент коллекции и переводит курсор на предыдущий элемент коллекции

    • int previousIndex — возвращает индекс предыдущего element коллекции

    • void remove() — удаляет текущий элемент коллекции

    • void add(E e) — добавляет элемент e после текущего element коллекции

  9. Класс Arrays — это утorтарный класс, предназначенный для разнообразных манипуляций с массивами. В этом классе есть методы превращения массива в список, поиска по массиву, копирования массива, сравнения массивов, получения хешcodeа массива, представление массива в виде строки и др.

  10. Класс Collections — это утorтарный класс для работы с коллекциями. В этом классе есть методы добавления элементов в коллекцию, наполнения коллекции elementми, поиска по коллекции, копировании коллекции, сравнения коллекции, нахождения максимального и минимального элементов коллекции, а также методы получения специфический модификаций коллекций известных типов (например, можно получить потокобезопасную коллекции or неизменяемую коллекцию с одним элементом).

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION