Wednesday, May 27, 2015

Brain teaser interview questions



identical balls. one ball is heavy. find the heavy ball with only 2 measurements ........ dead easy.
3     Split the 9 balls into three groups of 3 balls.
4     Choose two groups and weigh them on the balance:
5         If balanced, the heavy ball is in the other group.
6         If imbalanced, the heavy ball is in the heavier group.
7     Find the group with the heavy ball, pick two balls from the three and weigh them:
8         If balanced, the heavy ball is the other one.
9         If imbalanced, the heavy ball is the heavier one.
http://www.careercup.com/question?id=5428361417457664
You have three jars filled with candies. One jar is filled with banana candies, one jar is filled with lemon candies and one jar has a mix of both. All the jars are mislabelled (i.e. all the jars have wrong labels about what kind of candies they contain). 
All the candies look very similar in shape, size and color and they even smell the same. The only way to distinguish them is by tasting. 
You have to eat one and only one candy to determine the correct jar labels. You can eat that one candy from any jar you want as long as you eat only one in total.

Suppose jar 1 is labelled lemon 
jar 2 -> banana 
jar 3 -> Mix 
Take a candy from the jar 3 which is labelled as Mix of both and eat. 

Suppose it is lemon, take the lemon label from the jar 1 and place it on jar 3. Now we are done. jar 2 will be mix, jar 1 banana from the fact that all jars have wrong labels. 

Same logic goes in case it turns out to be banana candy after eating.

http://segmentfault.com/q/1010000003737940
一个岔路口分别通向诚实国和说谎国,来了两个人,一个说真话一个说假话,我们不知道哪个说真话哪个说假话,现在要去诚实国,问两个人,请问怎么问才能到诚实国。
方法当然是问其中一个人,这条路是去诚实国的吗,然后问第二个人,根据他得回答分析。
这个不时重点,重点是题目要用编程中的逻辑运算表达式解释原因?这该如何用逻辑运算表达式解释原因呢?
var a = Math.random() < 0.5;
var b = !a;
这时候不知道 a 和 b 哪个是真哪个是假,但是一定知道 a && b 是假,a || b 是真。
联合两个人的说话,向 b 问:如果我问 a 这条路是否通向诚实图,他会怎么回答?
不管谁回答的是假话,这个综合的结果都一定是假的。

Monday, May 11, 2015

I Will Get That Job At Google. | Why using many threads in Java is bad



I Will Get That Job At Google. | Why using many threads in Java is bad
Each OS and JVM has its own thread settings and there is no concrete value of max thread limit. But it can be easily calculated. Using a lot of threads is bad not only because of their consumption.
Thread lifecycle overhead
Thread creation and teardown are not free. The actual overhead varies across platforms, but thread creation takes time, introducing latency into request processing, and requires some processing activity by the JVM and OS. If requests are frequent and lightweight, as in most server applications, creating a new thread for each request can consume significant computing resources.
Context switch
When OS decides to switch to another thread execution, there is a context switch - all the registers and data are being pushed to memory, CPU and RAM are being tuned to another thread, another thread restores its state agein etc. These operations aren’t too slow, but when there are hundreds or even thousands of threads, it can be a real disaster. OS will work inefficiently and most of time will be used to switch one context to another.
Thread data
Each thread had its stack (quite huge block, usually 256 Kb by default), its descriptors. Threads also may have ThreadLocal variables. With default settings only 4 threads consume 1 Mb of memory. It’s quite huge amount of memory!
System overhead
Thread creation in Java forces OS to create a memory block for stack and other data. It is done using system calls. The thread stack is allocated by the call to pthread_create that also creates the native thread. (The JVM does not pass pthread_create a preallocated stack.)
Then, within pthread_create the stack is allocated by a call to mmap as follows:
mmap(0, attr.__stacksize,
     PROT_READ|PROT_WRITE|PROT_EXEC,
     MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
That means that for each thread at least one system native thread is being executed to prepare memory for it. It also has some overhead.
Efficiency comparison table
The one and only solution is to use horizontal scaling and to use thread pools which can help to re-use created threads. Don’t forget to reset ThreadLocal values!
Resources
Java Concurrency in Practice
Read full article from I Will Get That Job At Google. | Why using many threads in Java is bad

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts