JavaRush /جاوا بلاگ /Random-SD /جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو. حصو ...

جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو. حصو 13

گروپ ۾ شايع ٿيل
سلام!
هڪ مقصد ڏانهن حرڪت، سڀ کان پهرين، تحريڪ آهي.
تنهن ڪري، اهو صرف اهو سوچڻ ڪافي ناهي ته توهان ڪجهه حاصل ڪرڻ چاهيو ٿا. توهان کي ڪجهه ڪرڻ جي ضرورت آهي - جيتوڻيڪ ننڍا قدم - پر اهي هر روز ڪريو، ۽ صرف هن طريقي سان توهان آخري مقصد حاصل ڪندا. ۽ جتان توھان ھتي آھيو جاوا ڊولپرز بنجڻ لاءِ، توھان کي گھٽ ۾ گھٽ ھڪڙو قدم کڻڻو پوندو پنھنجي جاوا جي ڄاڻ کي ھر روز وڌائڻ لاءِ. اڄ جي جاوا قدم لاءِ، مان توهان کي صلاح ڏيان ٿو ته توهان پاڻ کي نئين حصي سان واقف ڪيو ڊولپرز لاءِ مشهور انٽرويو سوالن جي تجزيي جي. جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 1اڄ اسان جونيئر ماهرن لاءِ سوالن جي عملي حصي ۾ وينداسين. هڪ انٽرويو ۾ هڪ عملي ڪم غير معمولي ناهي. اهو ضروري آهي ته اهڙي صورتحال ۾ وڃائجي نه وڃجي، ٿڌي سر رکڻ جي ڪوشش ڪريو ۽ بهترين حل پيش ڪريو، يا اڃا به ڪيترائي. مان اهو به مشورو ڏيندس ته ڪنهن مسئلي کي حل ڪرڻ وقت خاموش نه رهو، پر پنهنجي سوچ جي ٽرين تي تبصرو ڪريو ۽ حل لکو، يا لکڻ کان پوء، لفظن ۾ وضاحت ڪريو ته توهان ڇا ڪيو ۽ ڇو ڪيو. اهو توهان کي انٽرويو وٺندڙ کي خاموش فيصلي کان گهڻو وڌيڪ پسند ڪندو. سو اچو ته شروع ڪريون!

111. سلسلي جي وچ ۾ ڊيٽا کي ڪيئن مٽائڻ؟

جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 2موضوعن جي وچ ۾ ڊيٽا مٽائڻ لاءِ، توھان استعمال ڪري سگھوٿا ڪيترائي مختلف طريقا ۽ وسيلا: مثال طور، ايٽمي متغير استعمال ڪريو، هم وقت سازي ڪيل مجموعا، ۽ ھڪ سيمفور. پر هن مسئلي کي حل ڪرڻ لاء، مان هڪ مثال ڏيندس Exchanger سان . ايڪسچينجر هڪ هم وقت سازي وارو طبقو آهي سمورو پيڪيج جيڪو هڪ گڏيل هم وقت سازي پوائنٽ ٺاهي ٿريڊز جي وچ ۾ عناصر جي مٽاسٽا کي آسان بڻائي ٿو. ان جو استعمال ٻن موضوعن جي وچ ۾ ڊيٽا جي مٽاسٽا کي آسان بڻائي ٿو. اهو ڪم ڪرڻ جو طريقو بلڪل سادو آهي: اهو انتظار ڪري ٿو ٻن الڳ موضوعن کي ڪال ڪرڻ لاءِ ان جي exchange() طريقو . انهن جي وچ ۾ هڪ تبادلي واري نقطي وانگر ڪجهه پيدا ٿئي ٿو: پهريون ڌاڳو پنهنجو اعتراض رکي ٿو ۽ موٽ ۾ ٻئي جو اعتراض وصول ڪري ٿو، ۽ بعد ۾، بدلي ۾، پهرين جو اعتراض حاصل ڪري ٿو ۽ پنهنجو پاڻ کي رکي ٿو. اهو آهي، پهريون ٿريڊ ايڪسچينج() طريقو استعمال ڪري ٿو ۽ بيڪار آهي جيستائين ٻيو ٿريڊ هڪ ئي شئي تي ايڪسچينج() طريقو ڪال ڪري ۽ ڊيٽا انهن جي وچ ۾ مٽائي. مثال طور، ٿريڊ ڪلاس جي هيٺين عمل درآمد تي غور ڪريو :
public class CustomThread extends Thread {
 private String threadName;
 private String message;
 private Exchanger<String> exchanger;

 public CustomThread(String threadName, Exchanger<String> exchanger) {
   this.threadName = threadName;
   this.exchanger = exchanger;
 }

 public void setMessage(final String message) {
   this.message = message;
 }

 @Override
 public void run() {
   while (true) {
     try {
       message = exchanger.exchange(message);
       System.out.println(threadName + " поток получил сообщение: " + message);
       Thread.sleep(1000);
     } catch (Exception e) {
       e.printStackTrace();
     }
   }
 }
}
ٿريڊ ڪنسٽرڪٽر ۾، اسان ايڪسچينجر شئي جي وضاحت ڪريون ٿا جيڪو شيون قبول ڪري ٿو String قسم جي ، ۽ شروع ٿيڻ تي ( رن ميٿڊ ۾ ) اسان ان جي exchange() کي استعمال ڪريون ٿا پيغام کي مٽائڻ لاءِ ٻئي ٿريڊ سان جيڪو اهو طريقو استعمال ڪري ٿو ساڳئي Exchanger ۾ . اچو ته ان کي بنيادي طور تي هلون :
Exchanger<String> exchanger = new Exchanger<>();
CustomThread first = new CustomThread("Первый ", exchanger);
first.setMessage("Сообщение первого потока");
CustomThread second = new CustomThread("Второй", exchanger);
second.setMessage("Сообщение второго потока");
first.start();
second.start();
ڪنسول ڏيکاريندو:
پهرين ٿريڊ جو نياپو مليو: ٻي ٿريڊ مان نياپو، ٻئي ٿريڊ جو نياپو: پهرئين ٿريڊ مان نياپو، ٻئي ٿريڊ مان نياپو: ٻئي ٿريڊ مان نياپو، پهرين ٿريڊ جو نياپو: پهرئين ٿريڊ مان نياپو ٻيو نياپو مليو: پهرين ٿريڊ مان نياپو، پهرين ٿريڊ کي نياپو مليو: ٻئي ٿريڊ مان نياپو....
هن جو مطلب آهي ته ڊيٽا جي تبادلي جي سلسلي جي وچ ۾ ڪامياب آهي.

112. ٿريڊ ڪلاس ۽ رنبل انٽرفيس ۾ ڇا فرق آھي؟

پهرين شيء جيڪا مان نوٽ ڪندس ته ٿريڊ هڪ ڪلاس آهي، رنبل هڪ انٽرفيس آهي، جيڪو تمام واضح فرق آهي =D جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 3مان اهو به چوندس ته ٿريڊ استعمال ٿئي ٿو رنبل (composition). اهو آهي، اسان وٽ ٻه طريقا آهن:
  1. Thread مان وارث ڪريو ، رن جي طريقي کي ختم ڪريو، پوء ھي اعتراض ٺاھيو ۽ ٿريڊ کي start() طريقي سان شروع ڪريو .

  2. هڪ خاص طبقي ۾ Runnable کي لاڳو ڪريو ، ان جي run() طريقي کي لاڳو ڪريو ، ۽ پوء ھڪڙو ٺھيل اعتراض ٺاھيو ، ھن اعتراض کي رننبل انٽرفيس کي ان جي ٺاھيندڙ کي تفويض ڪيو . خير، آخر ۾، شروع ڪريو Thread اعتراض استعمال ڪندي start() طريقو .

ڇا ترجيح آهي؟ اچو ته ٿورو سوچيو:
  • جڏهن توهان رنبل انٽرفيس کي لاڳو ڪريو ٿا ، توهان موضوع جي رويي کي تبديل نه ڪندا آهيو. لازمي طور تي توهان صرف موضوع کي هلائڻ لاء ڪجهه ڏئي رهيا آهيو. ۽ هي اسان جو ٺهيل آهي، جنهن جي نتيجي ۾ هڪ سٺو طريقو سمجهيو ويندو آهي.

  • لاڳو ڪرڻ Runnable توهان جي ڪلاس کي وڌيڪ لچڪ ڏئي ٿو. جيڪڏهن توهان Thread مان ورثي ۾ آهيو ، ته پوءِ توهان جيڪو عمل ڪندا اهو هميشه ٿريڊ تي هوندو. پر جيڪڏهن توهان Runnable تي عمل ڪيو ته اهو صرف هڪ موضوع نه هجڻ گهرجي. آخرڪار، توهان يا ته ان کي هڪ سلسلي ۾ هلائي سگهو ٿا يا ان کي ڪجهه عمل ڪندڙ خدمت ڏانهن منتقل ڪري سگهو ٿا. خير، يا صرف ان کي پاس ڪريو هڪ ڪم جي طور تي هڪ واحد موضوع واري ايپليڪيشن ۾.

  • Runnable استعمال ڪندي توهان کي منطقي طور تي ڪم جي عمل کي ٿريڊ ڪنٽرول منطق کان الڳ ڪرڻ جي اجازت ڏئي ٿي.

  • جاوا ۾، صرف واحد وراثت ممڪن آهي، تنهنڪري صرف هڪ طبقي کي وڌايو وڃي ٿو. ساڳئي وقت، توسيع واري انٽرفيس جو تعداد لامحدود آهي (چڱو، بلڪل لامحدود نه، پر 65535 ، پر توهان ممڪن ناهي ته ڪڏهن به هن حد کي هٽايو).

چ ،و ، ڇا استعمال ڪرڻ بهتر آهي اهو فيصلو ڪرڻ توهان تي آهي ^^

113. ٽي 1، ٽي 2 ۽ ٽي 3 موضوع آهن. انهن کي ترتيب سان ڪيئن لاڳو ڪجي؟جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 4

سڀ کان پهرين ۽ آسان شيء جيڪا ذهن ۾ اچي ٿي، استعمال ڪندي آهي join() طريقو . اهو موجوده سلسلي جي عمل کي معطل ڪري ٿو (جنهن کي طريقي سان سڏيو ويندو آهي) جيستائين اهو سلسلو جنهن تي طريقو سڏيو ويندو هو تي عملدرآمد ختم ڪري. اچو ته اسان جي پنهنجي سلسلي تي عمل درآمد ٺاهيون:
public class CustomThread extends Thread {
private String threadName;

 public CustomThread(final String  threadName){
   this.threadName = threadName;
 }

 @Override
 public void run() {
   System.out.println(threadName + " - начал свою работу");
   try {
     // происходит некая логика
     Thread.sleep(1000);
   } catch (InterruptedException e) {
     e.printStackTrace();
   }

   System.out.println(threadName + " - закончил свою работу");
 }
}
اچو ته هڪ هڪ ڪري ٽي ٿريڊ شروع ڪريون join() :
CustomThread t1 = new CustomThread("Первый поток");
t1.start();
t1.join();
CustomThread t2 = new CustomThread("Второй поток");
t2.start();
t2.join();
CustomThread t3 = new CustomThread("Третий поток");
t3.start();
t3.join();
ڪنسول آئوٽ:
پهرئين ٿريڊ - ڪم شروع ڪيو، پهرئين ٿريڊ - پنهنجو ڪم مڪمل ڪيو، ٻيو ٿريڊ - پنهنجو ڪم شروع ڪيو، ٻيو ٿريڊ - پنهنجو ڪم مڪمل ڪيو، ٽيون موضوع - پنهنجو ڪم شروع ڪيو، ٽيون موضوع - پنهنجو ڪم مڪمل ڪيو.
مطلب ته اسان پنهنجو ڪم پورو ڪيو آهي. اڳيون، اسان سڌي طرح جونيئر سطح تي عملي ڪمن ڏانهن وڃو .

عملي ڪم

114. ميٽرڪس ڊيگنل سم (ليٽ ڪوڊ مسئلو)

حالت: ڳڻپ ڪريو سڀني عناصرن جي مکيه ڊرنال تي ۽ سڀني عناصرن جي اضافي ديگنل تي جيڪي مکيه اخترن جو حصو نه آھن. جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 51. فارم جي ميٽرڪس سان: mat = [[1,2,3], [4,5,6], [7,8,9]] آئوٽ پٽ هجڻ گهرجي - 25 2. ميٽرڪس سان - mat = [[1,1,1,1], [1,1,1,1], [1,1,1,1], [1,1,1,1]] آئوٽ پٽ هجڻ گهرجي - 8 3. سان a matrix - mat = [[5]] نتيجو ھئڻ گھرجي - 5 پڙھڻ کي روڪيو ۽ پنھنجي فيصلي تي عمل ڪريو. منهنجو حل هيٺ ڏنل هوندو:
public static int countDiagonalSum(int[][] matrix) {
 int sum = 0;
 for (int i = 0, j = matrix.length - 1; i < matrix.length; i++, j--) {
   sum += matrix[i][i];
   if (j != i) {
     sum += matrix[i][j];
   }
 }
 return sum;
}
سڀ ڪجھ ٿئي ٿو ھڪڙي ھڪڙي پاسن سان گڏ، جنھن دوران اسان وٽ رپورٽ لاءِ ٻه انڊيڪس آھن: i - صفن جي قطارن جي رپورٽ ڪرڻ لاءِ ۽ مين ڊاگنل جي ڪالمن جي رپورٽ ڪرڻ لاءِ، j - اضافي ڊاريگنل جي ڪالمن جي رپورٽ ڪرڻ لاءِ. جيڪڏهن مکيه ڊرون جي سيل ۽ اضافي هڪ سان ٺهڪي اچي ٿي، ته پوء انهن مان هڪ قدر کي نظر انداز ڪيو ويندو جڏهن رقم جي حساب سان. اچو ته حالت مان ميٽرڪس استعمال ڪندي چيڪ ڪريون:
int[][] arr1 = {
   {1, 2, 3},
   {4, 5, 6},
   {7, 8, 9}};
System.out.println(countDiagonalSum(arr1));

int[][] arr2 = {
   {1, 1, 1, 1},
   {1, 1, 1, 1},
   {1, 1, 1, 1},
   {1, 1, 1, 1}};
System.out.println(countDiagonalSum(arr2));

int[][] arr3 = {{5}};
System.out.println(countDiagonalSum(arr3));
ڪنسول آئوٽ:
25 8 5

115. زيرو منتقل ڪريو (ليٽ ڪوڊ چئلينج)

حالت: هڪ انٽيجر صف ۾، سڀني 0 کي آخر تائين منتقل ڪريو، غير صفر عناصر جي لاڳاپي واري ترتيب کي برقرار رکندي. 1. هڪ صف سان: [0,1,0,3,12] آئوٽ پٽ هجڻ گهرجي: [1,3,12,0,0] 2. هڪ صف سان: [0] آئوٽ پٽ هجڻ گهرجي: [0] رکو ۽ منهنجو فيصلو لکو... منهنجو فيصلو:
public static void moveZeroes(int[] nums) {
 int counterWithoutNulls = 0;
 int counterWithNulls = 0;
 int length = nums.length;
 while (counterWithNulls < length) {
   if (nums[counterWithNulls] == 0) {// находим нулевые элементы и увеличиваем счётчик
     counterWithNulls++;
   } else { // сдвигаем элементы на количество найденных нулевых элементов слева
     nums[counterWithoutNulls++] = nums[counterWithNulls++];
   }
 }
 while (counterWithoutNulls < length) {
   nums[counterWithoutNulls++] = 0;// заполняем последние элементы массива нулями согласно счётчику нулей
 }
}
امتحان:
int[] arr1 = {1, 2, 0, 0, 12, 9};
moveZeroes(arr1);
System.out.println(Arrays.toString(arr1));

int[] arr2 = {0};
moveZeroes(arr2);
System.out.println(Arrays.toString(arr2));
ڪنسول آئوٽ:
[1، 2، 12، 9، 0، 0] [0]

116. ڏنل فهرست <String> نالا. هر نالي مان پهريون اکر هٽايو ۽ ترتيب ڏنل فهرست کي گھمايو

1. پهرين شيء جيڪا ذهن ۾ اچي ٿي اها آهي مجموعن جي ڪلاس جا طريقا ، جنهن ۾ گڏ ڪرڻ لاء ڪيترائي مددگار طريقا شامل آهن:
public static List<String> processTheList(List<String> nameList) {
 for (int i = 0; i < nameList.size(); i++) {
   nameList.set(i, nameList.get(i).substring(1));
 }
 Collections.sort(nameList);
 return nameList;
}
2. انهي سان گڏ، جيڪڏهن اسان جاوا ورزن 8 ۽ اعلي استعمال ڪندا آهيون، اسان کي صرف اسٽريمز ذريعي حل ڏيکارڻو پوندو:
public static List<String> processTheList(List<String> nameList) {
 return nameList.stream()
     .map(x -> x.substring(1))
     .sorted().collect(Collectors.toList());
}
چونڊيل حل کان سواء، چيڪ ٿي سگهي ٿو هن ريت:
List<String> nameList = new ArrayList();
nameList.add("John");
nameList.add("Bob");
nameList.add("Anna");
nameList.add("Dmitriy");
nameList.add("Peter");
nameList.add("David");
nameList.add("Igor");

System.out.println(processTheList(nameList));
ڪنسول آئوٽ:
]ا - مذ[ شوق، ايتر، گور، مٽيءَ، نان، اوب، اون.

117. صفا ڦٽي

حل 1 ٻيهر، پهرين شيء جيڪا ذهن ۾ اچي ٿي اها آهي طريقن کي استعمال ڪرڻ لاء مددگار يوٽيلٽي ڪلاس ڪليڪشن . پر جيئن ته اسان وٽ هڪ صف آهي، اسان کي پهريان ان کي مجموعي ۾ تبديل ڪرڻو پوندو (فهرست):
public static Integer[] reverse(Integer[] arr) {
 List<Integer> list = Arrays.asList(arr);
 Collections.reverse(list);
 return list.toArray(arr);
}
حل 2 جيئن ته سوال هڪ صف جي باري ۾ هو، تنهن ڪري مان سمجهان ٿو ته اهو ضروري آهي ته حل کي دٻي جي ٻاهران تيار ڪيل ڪارڪردگي استعمال ڪرڻ کان سواء، ۽ ائين ڳالهائڻ لاء، ڪلاس جي مطابق:
public static Integer[] reverse(Integer[] arr) {
 for (int i = 0; i < arr.length / 2; i++) {
   int temp = arr[i];
   arr[i] = arr[arr.length - 1 - i];
   arr[arr.length - 1 - i] = temp;
 }
 return arr;
}
امتحان:
Integer[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(Arrays.toString(reverse(arr)));
ڪنسول آئوٽ:
[9، 8، 7، 6، 5، 4، 3، 2، 1]

118. چيڪ ڪريو ته هڪ تار هڪ پيلنڊروم آهي

جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 6حل 1 اهو فوري طور تي ياد رکڻ جي قابل آهي StringBuilder : اهو باقاعده اسٽرنگ جي مقابلي ۾ مختلف طريقن سان وڌيڪ لچڪدار ۽ امير آهي . اسان خاص طور تي ريورس طريقي ۾ دلچسپي رکون ٿا :
public static boolean isPalindrome(String string) {
 string = string.toLowerCase(); //приводит всю строку к нижнему регистру
 StringBuilder builder = new StringBuilder();
 builder.append(string);
 builder.reverse(); // перевочиваем строку методом Builder-а
 return (builder.toString()).equals(string);
}
حل: ايندڙ طريقه ڪار استعمال ڪرڻ کان سواءِ هوندو ”لوفولز“ دٻي مان ٻاهر. اسان اسٽرنگ جي پوئين پاسي کان ايندڙ اکرن سان ملندڙ ڪردارن جو مقابلو ڪريون ٿا:
public static boolean isPalindrome(String string) {
  string = string.toLowerCase();
 int length = string.length();
 int fromBeginning = 0;
 int fromEnd = length - 1;
 while (fromEnd > fromBeginning) {
   char forwardChar = string.charAt(fromBeginning++);
   char backwardChar = string.charAt(fromEnd--);
   if (forwardChar != backwardChar)
     return false;
 }
 return true;
}
۽ اسان ٻنهي طريقن جي جانچ ڪريون ٿا:
boolean isPalindrome = isPalindrome("Tenet");
System.out.println(isPalindrome);
ڪنسول آئوٽ:
سچو

119. هڪ سادي ترتيب ڏيڻ وارو الگورٿم لکو (بلبل، چونڊ يا شٽل). اهو ڪيئن بهتر ٿي سگهي ٿو؟

عمل درآمد لاءِ هڪ سادي الگورتھم جي طور تي، مون چونڊ ترتيب چونڊيو - چونڊ ترتيب:
public static void selectionSorting(int[] arr) {
 for (int i = 0; i < arr.length - 1; i++) {
   int min = i;
   for (int j = i + 1; j < arr.length; j++) {
     if (arr[j] < arr[min]) {
       min = j; // выбираем минимальный элемент в текущем числовом отрезке
     }
   }
   int temp = arr[min]; // меняем местами минимальный элемент с элементом под индексом i
   arr[min] = arr[i]; // так How отрезок постоянно уменьшается
   arr[i] = temp; // и выпадающие из него числа будут минимальными в текущем отрезке
 } // и How итог - числа оставшиеся вне текущей итерации отсортированы от самого наименьшего к большему
}
بهتر نسخو هن طرح نظر ايندو:
public static void improvedSelectionSorting(int[] arr) {
 for (int i = 0, j = arr.length - 1; i < j; i++, j--) { // рассматриваемый отрезок с каждой итерацией
   // будет уменьшаться с ДВУХ сторон по одному элементу
   int min = arr[i];
   int max = arr[i];
   int minIndex = i;
   int maxIndex = i;
   for (int n = i; n <= j; n++) { // выбираем min и max на текущем отрезке
     if (arr[n] > max) {
       max = arr[n];
       maxIndex = n;
     } else if (arr[n] < min) {
       min = arr[n];
       minIndex = n;
     }
   }
   // меняем найденный минимальный элемент с позиции с индексом min на позицию с индексом i
   swap(arr, i, minIndex);

   if (arr[minIndex] == max) {// срабатывает, если элемент max оказался смещен предыдущей перестановкой -
     swap(arr, j, minIndex); // на старое место min, поэтому с позиции с индексом min смещаем его на позицию j
   } else {
     swap(arr, j, maxIndex); // простое обмен местами элементов с индексами max и j
   }
 }
}

static int[] swap(int[] arr, int i, int j) {
 int temp = arr[i];
 arr[i] = arr[j];
 arr[j] = temp;
 return arr;
}
خير، هاڻي اسان کي پڪ ڪرڻ جي ضرورت آهي ته ڇا ترتيب ڏيڻ واقعي بهتر ٿي چڪو آهي. اچو ته ڪارڪردگي جو مقابلو ڪريو:
long firstDifference = 0;
long secondDifference = 0;
long primaryTime;
int countOfApplying = 10000;
for (int i = 0; i < countOfApplying; i++) {
 int[] arr1 = {234, 33, 123, 4, 5342, 76, 3, 65,
     3, 5, 35, 75, 255, 4, 46, 48, 4658, 44, 22,
     678, 324, 66, 151, 268, 433, 76, 372, 45, 13,
     9484, 499959, 567, 774, 473, 3, 32, 865, 67, 43,
     63, 332, 24, 1};
 primaryTime = System.nanoTime();
 selectionSorting(arr1);
 firstDifference += System.nanoTime() - primaryTime;

 int[] arr2 = {234, 33, 123, 4, 5342, 76, 3, 65,
     3, 5, 35, 75, 255, 4, 46, 48, 4658, 44, 22,
     678, 324, 66, 151, 268, 433, 76, 372, 45, 13,
     9484, 499959, 567, 774, 473, 3, 32, 865, 67, 43,
     63, 332, 24, 1};
 primaryTime = System.nanoTime();
 improvedSelectionSorting(arr2);
 secondDifference += System.nanoTime() - primaryTime;
}

System.out.println(((double) firstDifference / (double) secondDifference - 1) * 100 + "%");
ٻئي قسمون هڪ ئي چڪر ۾ شروع ٿيون، ڇاڪاڻ ته جيڪڏهن الڳ الڳ لوپ هئا، مٿي ڏنل ڪوڊ مان ترتيب ڏيڻ ان کان وڌيڪ خراب نتيجا ڏيکاريندو جيڪڏهن ان کي سيڪنڊ رکيو ويو. اهو حقيقت جي ڪري آهي ته پروگرام "گرم اپ" ۽ پوء ٿورو تيز ڪم ڪري ٿو. پر مان ٿورڙي موضوع تي وڃي رهيو آهيان. کنسول ۾ هن چيڪ جي پنجن رنن کان پوء، مون ڪارڪردگي ۾ اضافو ڏٺو: 36.41006735635892٪ 51.46131097160771٪ 41.88918834013988٪ 48.091980705743566٪ 48.091980705743566٪ 424166٪ 241466٪ 36.41006735635892٪ تمام سٺو نتيجو. جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 7

120. لکو الگورٿم (عملن جو تسلسل) لکڻ لاءِ لفظي قسم جي ٽائپ بائيٽ جي لٽريريل سان. وضاحت ڪريو ياداشت کي ڇا ٿيندو

  1. بائيٽ جي قيمت int ۾ تبديل ڪئي وئي آهي. ميموري جو 1 بائيٽ ان لاءِ مختص نه ڪيو ويندو، پر سڀني انٽ ويلز وانگر - 4، جيڪڏهن هي قدر اڃا تائين انٽ اسٽيڪ تي نه آهي. جيڪڏهن اتي آهي، ان جي هڪ لنڪ آساني سان ملي ويندي.

  2. ٻه int قدر شامل ڪيا ويندا ۽ ٽيون حاصل ڪيو ويندو. ان لاءِ هڪ نئون ميموري سيڪشن مختص ڪيو ويندو - 4 بائيٽ (يا هڪ حوالو وصول ڪيو ويندو int اسٽيڪ مان موجوده قيمت ڏانهن).

    انهي صورت ۾، ٻن انٽس جي ياداشت اڃا تائين قبضو ڪيو ويندو، ۽ انهن جي قيمتن کي ترتيب سان int اسٽيڪ تي محفوظ ڪيو ويندو.

دراصل، هي آهي جتي جونيئر سطح جا سوال اسان جي لسٽ مان ختم ٿي وڃن ٿا. ايندڙ مضمون کان شروع ڪندي، اسان وچولي سطح جي مسئلن کي سمجھندا سين. مان اهو نوٽ ڪرڻ چاهيان ٿو ته وچين سطح جا سوال پڻ فعال طور تي داخلا-سطح ڊولپرز کان پڇيا ويا آهن - جونيئر. تنهن ڪري رهو. چڱو، اهو سڀ ڪجهه اڄ لاء آهي: توهان کي ڏسو!جاوا ڊولپر لاءِ انٽرويوز کان سوالن ۽ جوابن جو تجزيو.  حصو 13 - 8
سيريز ۾ ٻيا مواد:
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION