PCB는 프로그램이 메모리에 올라올 떄 생성되는것으로 알고있습니다. 시스템 프로그래밍 책을 보면 Windows와 같은 운영체제는(대부분의 운영체제?) 선점형 OS이고 시분할 방식의 처리를 위해 각 프로세스의 상태를 지닌다고 하는데, 해당 책에서는 프로세스가 상태를 지니는게 아닌 스레드가 상태(준비,실행,대기등)를 지닌다고 하는데 여기서 궁금한점이 있습니다. 멀티스레드 환경에서도 여러 스레드끼리 컨텍스트 스위칭이 발생할텐데 그 스레드들의 상태는 PCB에 어떻게 저장이 되는형식일까요? 스레드가 2개가 실행상태에 있다가 I/O로 인한 대기상태로 빠진다던지 주어진 타임슬라이스를 다 사용해 컨텍스트 스위칭이 동시에 일어났다면 두 쓰레드의 정보를 저장해야 할텐데 하나의 PCB에서 이를 모두 관리한다는게 잘 와닿지가 않습니다. 해당 강의에서도 PCB에서는 프로세스 상태를 저장한다고 하니 많이 헷갈리네요ㅠㅠ
15분부터 디버깅 하는거 똑같이 따라해봤는데요, f11만 눌러서 Init()함수까지 디버깅 마치고, 다시 화살표가 public static Manager GetInstance() 여기로 돌아왔을 때, f10을 누르면 Plyaer 스크립트의 mg 값에 정상적으로 값이 들어가고, f11을 누르면 mg에 null 이 들어갑니다. 도대체 왜이러는 걸까요? 그리고 질문 하나 더 있습니다. 싱글톤을 시용하는 이유가, Find()를 사용해서 게임오브젝트를 찾는게 부하가 심하기 때문에, 이것을 개선하기 위해 싱글톤을 사용한다고 하셨던것 같은데요, Init() 함수 안에서 if null 이라면 GameObject.Find("@Managers") 이런식으로 어차피 Find를 사용하고 있는데, 그럼 이 부분도 Find를 사용하지 않도록 코드를 바꿔야 하는것 아닌가욤?
안녕하세요 한정수 멘토님, 며칠전부터 해당 강의 차근차근 들으며 많은 도움 받고 있는 수강생입니다. 현재는 웹개발에서 프론트와 백엔드개발 사이에서 고민을 하고 있는 상황입니다. 그리고 저는 문과 졸업생이며, 이제 막 개발분야에 대해 준비를 하고 있는 중이며 향후 계획은 올해 안까지 취업을 목표로 준비를 하려고 하고 있습니다. 본론만 간략히 말씀드리면, 제가 해보고 싶은것은 백엔드개발자인데 취업엔 프론트엔드쪽이 유리한것 같아 이 점을 고민하고 있습니다. 그리고 한 가지 더 추가하면 SI쪽은 무조건 피하고 싶은 마음입니다. 제가 문과를 졸업하였고, 올해까지 취업을 목표로 하고있어 준비할 수 있는 기간도 그리 많지않은데 서비스회사 쪽으로의 백엔드개발자로 취업을 하려는 계획이 현실적으로 다소 무리가 있는 계획인지 궁금하여 질문올립니다. 물론 어느 쪽이라도 쉬운곳은 없고, 무조건 불가능하지도 않겠지만 6~8개월 준비하여 서비스회사로의 백엔드개발자로 취업을 할 수 있는 가능성이 얼마나 되는지 현실적으로 알고 싶습니다. 무조건 지키고 싶은 부분은, - 올해 내 취업 - 서비스회사 이 두 가지입니다. 이런 점에서 볼때, 프론트엔드쪽으로 준비하는게 맞는 것인지 고견 부탁드립니다. 제가 알기론, 프론트보다 백엔드쪽으로의 취업이 보다 어렵다고 들었는데, 굳이 프론트랑 비교하자면 조금 어려운 정도인지, 프론트로의 취업보다 의미가 있을 정도의 차이인지, 말이 길었는데, 유익한 강의 항상 감사드립니다 :) +수정) 한 가지 더 추가하자면, 서비스회사라면 소규모의 스타트업도 충분히 좋습니다.
안녕하세요, 강의를 수강하던 도중 오타 때문에 다음과 같은 현상을 발견했습니다. 바로 다음과 같이 /servlet/members로 접근했을 때, 웹뷰가 아닌 members라는 파일을 다운로드시켜주는 현상이였습니다. 다음과 같은 현상을 겪은 이유는, 다음과 같이 setContentType에 오타를 발생시켰기 때문이였습니다. 그래서 나름대로 이러한 현상에 대해서 추리를 해보았는데, 브라우저는 html 파일만 열 수 있기 때문에 서버 단에서 html이 아닌 다른 파일을 보내면 클라이언트가 직접 다운로드할 수 있게 한다. 라는 생각이 들었습니다. 맞을까요? 그리고 이런 현상을 이용하면 보안적으로도 악용할 수도 있을 것이라 생각이 드는데 이것도 맞을까요?
1) keras.layers.Dense( 64 , activation= 'relu' ) keras.layers.Dense( 10 , activation= 'softmax' ) 위 코드에서 은닉층에서는 relu 함수를 사용하는 이유가 무엇인가요?! 2) 457p predict로 첫 번째 샘플의 10개의 확률값을 예측하고 난 후, preds = model.predict(val_scaled[ 0 : 1 ]) # (1,28,28,1)인 데이터 preds 그래프를 그릴 때, plt.bar( range ( 1 , 11 ), preds[ 0 ]) plt.xlabel( 'class' ) plt.ylabel( 'prob.' ) plt.show() 왜 preds의 인덱스값이 0이 되나요...?
선생님의 풀이처럼 토마토가 있는 경우를 모두 queue에 넣은 다음 bfs를 한번만 하는 것이아니라, 토마토가 있을 때마다 {queue에 넣고 bfs돌리고}를 반복하였습니다. 결과가 -1일때만 while문에 빠져서 답이 안나오는데 무엇이 문제일까요 ㅠㅠ 감사합니다~ import sys import copy from collections import deque from collections import defaultdict sys.stdin = open("input.txt","rt") def bfs(i,j): dq = deque() days[i][j]=1 #새로운 출발점 dq.append((i,j)) while dq: x,y = dq.popleft() for i in range(4): nx,ny = x+dx[i],y+dy[i] if 0<=nx<n and 0<=ny<m and nums[nx][ny]==0: #토마토 있음 if days[nx][ny] == 0: #아직 방문X days[nx][ny] = days[x][y]+1 dq.append((nx,ny)) elif days[x][y]+1 < days[nx][ny]: #기존보다 더 빨리 익을 수 있음 days[nx][ny]= days[x][y]+1 dq.append((nx,ny)) if __name__=="__main__": m, n = map(int,input().split()) nums = [list(map(int,input().split())) for _ in range(n)] #원래 토마토배열 days = copy.deepcopy(nums) #토마토 익는 데 걸리는 시간 dx = [0,0,-1,1] dy = [1,-1,0,0] answer = 0 for i in range(n): for j in range(m): if nums[i][j]==1: #원래 토마토있음 bfs(i,j) #정답계산 tmp = 0 for i in range(n): for j in range(m): if days[i][j]==0: #익지 않은 토마토 존재 print(-1) sys.exit() elif days[i][j]>tmp: #최대 횟수 tmp = days[i][j] if tmp ==1: #이미 다 익어있는 경우 print(0) else: print(tmp-1)
안녕하세요~ 현재 프로젝트를 진행하면서 롤백 문제를 만나게 되었는데, 제목처럼 한 트랜잭션 메소드 내에서 엔티티 List를 쿼리한 후 for 루프를 돌며 각 엔티티들의 상태값을 변경하는 로직 중에서 하나의 엔티티에서 Exception이 발생하면 모든 엔티티들에 대한 변경이 모두 롤백되어버리는 상황이 생겼습니다. 이 문제를 해결하고자 자식 트랜잭션에 전파속성을 NESTED로 주어보았는데 JPA에서는 지원하지 않는 듯 하고(NestedTransactionException 발생), 원래의 전체 엔티티를 조회해온 후 for 루프를 도는 방식에서, 단 건 엔티티를 쿼리한 후 하나의 회원 정보만 업데이트 하는 방식으로 문제를 해결하긴 하였지만, 쿼리가 처리해야할 엔티티 갯수만큼 추가적으로 발생하는 또 다른 문제가 생겨서 고민고민하다가 질문을 남겼습니다. 다른 좋은 해결 방법이 있을까요?? 문제 해결을 위한 방향을 알고 싶습니다! 아래는 대략적으로 재현한 예시 코드입니다. @Service class MemberService ( private val memberRepository : MemberRepository, private val memberShipService : MemberShipService ) { @Transactional fun updateMemberShips () { getAllMembers().forEach { memberShipService. updateMemberShip (member) } } } @Service class MemberShipService ( private val externalClient : ExternalClient // 외부 API 를 콜하는 인터페이스 ) { fun updateMemberShip ( member : Member) { member .updateMemberShip() externalClient.sendEmail() // Exception 발생 가능 지점 } }
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
안녕하세요 :) 라우터 내에서 매번 NaverBookScraper의 인스턴스를 만들어서 스크래핑을 하고 디비에 저장하는 과정으로 코드를 이해를 하였는데요. 혹시 여기서 매번 인스턴스를 만드는 이유가 있으실까요? 현재 코드에서는 싱글톤으로 라우터 밖에 생성해서 계속 그 인스턴스를 사용해도 되지않나 싶어서요. 혹시 이유가 따로 있으신건지 궁금합니다 :)
파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
search함수에서 [ [10개] , [10개] [10개]] -> [30개] 있는걸로 수정하시기 위해서 append하는 로직이 더 있는데요. ( reulst = [] 이후 코드 ) 해당 코드가 async with ~~ as seesion : 의 indent안에 꼭 있어야 되나 싶어서욥. await asyncio.gather (~ )로 데이터를 다 가져와서 all_data에 있는 상태일텐데 여기서 30개로 합치는 코드는 해당 indent가 아니라 밖에 있어도 되지않나 생각이 들었습니다. 혹시 그렇게 할 경우에 로직에 제가 놓친 이슈가 있을 부분이 있을까요? 그리고 저렇게 with 안에 전부 두신 이유가 있을지도 궁금합니다 :)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 정답 코드 10째 줄에 sort는 왜 하는건지 알 수 있을까요? 어차피 모두 돌면서 검사하는건데 sort를 하면 실행 속도에 차이가 있는건가요??
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. for(int j = 0; j < cnt[i]; j += 2){ ret = char(i) + ret; ret += char(i); } 코드 맨 마지막 부분인 위 코드에서 알파벳들을 ret의 앞과 뒤에 하나씩 집어넣는데, 이해가 안돼서 질문드립니다.. ret = char(i) + ret 과 ret += char(i) 는 같은 코드 아닌가요..? 어떻게 양쪽 끝에 들어가는지 좀더 설명부탁드립니다!