IT 면접 족보41

권단비·2023년 2월 24일
0

IT

목록 보기
86/139

1. 단일 프로세스와 멀티 프로세스에 대하여 설명하시오.

▼정답

단일 프로세스 : 명령어 기반, 한 번에 한 작업만 실행 가능.(Dos, CMD)
멀티 프로세스 : 여러 개의 프로그램 동시 작업 가능.(windows)
멀티 프로세스 원리 : CPU는 하나지만, 속도가 빠르기 때문에 번갈아 실행시킨다.(컨텍스트 스위칭)
(A프로그램 실행 후 한 번 중단했다가 B프로그램을 실행시킴 | 끊기지 않고 동시 실행된다.)

2. 프로세스와 쓰레드의 차이는?

▼정답

프로세스 : 실행 중인 프로그램, 자원(resources)과 스레드로 구성
스레드  : 프로세스 내에서 실제 작업을 수행. (프로세스 내에서 실행되는 여러 흐름의 단위)
         모든 프로세스는 하나 이상의 쓰레드를 가지고 있다.
         (하나의 프로그램(프로세스) 안에 또 다른 프로그램(프로세스))

3.아래의 가로 찍기와 세로찍기를 쓰레드로 돌리시오.

		for(int i=0; i < 300; i++)
			System.out.printf("%s", new String("-"));		

		
		for(int i=0; i < 300; i++) 
			System.out.printf("%s", new String("|"));	

▼정답

package ThreadTest;

public class MultiThreadTest {

	public static void main(String[] args) {
		// 프로그램이 3개 돌아간다. MultiThreadTest main(), MyThread1 run(), MyThread2 run()
		// 스레드는 별도의 프로그램이기 때문에 main이 먼저 끝나고 나서도 MyThread1과 MyThread2이 실행된다.
		MyThread1 th1 = new MyThread1();
		MyThread2 th2 = new MyThread2();
		th1.start(); // OS한테 스레드 돌릴 거니까 돌아갈 수 있도록 방을 하나 생성해달라 요청.(OS가 스레드를 관리)
		th2.start();
//		th1.run(); // 으로 호출하면 실행되지만 절대 하면 안된다.
	}
}

class MyThread1 extends Thread { // 동시에 돌리고 싶은 작업을 분리
	public void run() { // run() : main의 역할
		for (int i = 0; i < 300; i++) {
			System.out.print("-");
		}
	} // run()
}

class MyThread2 extends Thread {
	public void run() {
		for (int i = 0; i < 300; i++) {
			System.out.print("|");
		}
	} // run()
}

4. 아래의 의미를 설명해 보시오.

메인 스레드가 종료되더라도 실행 중인 스레드가 하나라도 있다면 프로세스는 종료되지 않습니다.

▼정답

스레드는 별도의 프로그램이기 때문에 main이 먼저 끝나고 나서도 MyThread1과 MyThread2이 실행된다.

5.

학생마다 Student 객체를 생성하고, 4명의 학생 정보를 ArrayList<Student> 컬렉션에 저장한 후에,
ArrayList<Student>의 모든 학생(4명) 정보를 출력하고
학생 이름을 입력 받아 해당 학생의 학점 평균을 출력하는 프로그램을 작성하라.

학생 이름, 학과, 학번, 학점평균 입력하세요.
>> 황기태, 모바일, 1, 4.1
>> 이재문, 안드로이드, 2, 3.9
>> 김남윤, 웹공학, 3, 3.5
>> 최찬미, 빅데이터, 4, 4.25
----------------------------------
이름: 황기태
학과: 모바일
학번: 1
학점평균: 4.1
----------------------------------
이름: 이재문
학과: 안드로이드
학번: 2
학점평균: 3.9
----------------------------------
이름: 김남윤
학과: 웹공학
학번: 3
학점평균: 3.5
----------------------------------
이름: 최찬미
학과: 빅데이터
학번: 4
학점평균: 4.25
----------------------------------
학생 이름 >> 최찬미
최찬미, 빅데이터, 4, 4.25
학생 이름 >> 이재문
이재문, 안드로이드, 2, 3.9
학생 이름 >> 그만

▼정답

package ThreadTest;

import java.util.*;

class Student {
	String name;
	String major;
	String num;
	String avg;

	public Student(String name, String major, String num, String avg) {
		this.name = name;
		this.major = major;
		this.num = num;
		this.avg = avg;
	}

	public String toString() {
		StringBuffer sb = new StringBuffer();
		sb.append("----------------------------------" + "\n");
		sb.append("이름: " + name + "\n");
		sb.append("학과: " + major + "\n");
		sb.append("학번: " + num + "\n");
		sb.append("평균: " + avg + "\n");
		return sb.toString();
	}
}

public class Test1 {
	public static void main(String[] args) {
		List<Student> list = new ArrayList<>();
		StringTokenizer t;
		String inName = null;
		Scanner sc = new Scanner(System.in);

		System.out.println("학생 이름, 학과, 학번, 학점평균 입력하세요.");
		while (list.size() < 4) {
			String st = sc.nextLine();

			t = new StringTokenizer(st, " ,");

			while (t.hasMoreTokens()) {
				list.add(new Student(t.nextToken(), t.nextToken(), t.nextToken(), t.nextToken()));
			}
		}
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i));
		}
		System.out.println("----------------------------------");

		while (true) {
			System.out.print("학생 이름 >> ");
			String input = sc.nextLine();

			if (input.equals("그만")) {
				System.out.println("종료합니다.");
				break;
			}

			System.out.println("----------------------------------");
			for (int i = 0; i < list.size(); i++) {
				if (input.equals(list.get(i).name)) {

					String[] stu = { list.get(i).name, list.get(i).major, list.get(i).num, list.get(i).avg };
					for (int j = 0; j < stu.length; j++) {
						System.out.print(j < stu.length - 1 ? stu[j] + ", " : stu[j] + "\n");
					}
				}
			}
		}
	}
}

6.

ArayList<Student> 대신, HashMap<String, Studnet> 해시맵을 이용하여 다시 작성하라.
해시맵에서 키는 학생 이름으로 한다.

0개의 댓글