CodeGym /مدونة جافا /Random-AR /مهام جافا مع لمسة جديدة: مرحبًا، مقابلات!
John Squirrels
مستوى
San Francisco

مهام جافا مع لمسة جديدة: مرحبًا، مقابلات!

نشرت في المجموعة
أفضل أصدقاء طلاب CodeGym هم مهام البرمجة وJava ومدقق المهام. ومع ذلك، يأتي وقت يجب فيه على كل مطور في بادوان أن يبدأ في السير خارج المسار المطروق، وابتكار مشاريعه الصغيرة الخاصة، وإعداد نفسه لإجراء المقابلات. قد يعتقد المرء أن المقابلة ستحتوي على نفس مهام Java العملية الموجودة في هذه الدورة التدريبية. وهذا هو الحال في معظم الحالات، لكن بعض الشركات تحب طرح أسئلة خادعة أو شيء غير مألوف. لتجنب الانزعاج أثناء مقابلة مرهقة، من المفيد محاولة حل مهام Java المماثلة بنفسك في المنزل.
مهام جافا مع لمسة جديدة: مرحبًا، مقابلات!  - 1
في هذه المقالة، سوف نستكشف 5 من هذه المهام الصعبة. ننصحك بقراءة الشروط أولاً ومحاولة حلها بنفسك. وشيء آخر: لا تنس القيام بمهام Java في هذه الدورة كل يوم!

المهمة 1: إنشاء حلقة لا نهائية من الصفر

تم توفير كتلة من التعليمات البرمجية. أضف إليها لجعل الحلقة لا نهائية.
class ToInfinity {
    public static void main(String[] args) {

// Insert code here

        for (int i = start; i <= start + 1; i++) {
             /* This should be an infinite loop, but don't change anything here */
        }
    }
}
" هذا ليس بالأمر الصعب "، كما تقول. من المرجح أنك وجدت نفسك في هذا السيناريو بشكل متكرر: أثناء إكمال مهمة Java، قمت بإنشاء حلقة لا نهائية وكان عليك التفكير في كيفية التخلص منها. حسنا، هذا هو العكس. إليك الجزء الصعب: لا يمكنك تغيير الحلقة نفسها أو شروط الخروج الخاصة بها. لا يوجد سوى اثنين من التكرارات. لكنها كافية لإنشاء حلقة لا نهائية. يبدو أنه يجب تنفيذه لتكرارين فقط، ولكن يمكنك جعله لا نهائيًا باستخدام السعة الفائضة. هل خمنت بالفعل كيف؟

حل

بسبب تجاوز السعة، Integer.MAX_VALUEهذه هي القيمة القصوى التي intيمكن تخزينها في Java. إذا وصلت إلى Integer.MAX_VALUEهذه القيمة وقمت بزيادتها، فإنك ترجع إلى Integer.MIN_VALUE، أو بالأحرى، إلى أدنى Integerقيمة ممكنة. وبالتالي، لإكمال مهمة Java هذه، نحتاج ببساطة إلى تعيين 1 أقل من الحد الأقصى intلقيمة startالمتغير. كود جافا لهذه المهمة:
class ToInfinity {
    public static void main(String[] args) {
        int start = Integer.MAX_VALUE - 1;
        for (int i = start; i <= start + 1; i++) {
            // Infinite loop
            System.out.println(i); // Be sure we are in an infinite loop
        }
    }
}
ما يحدث؟ نبدأ بـ start=2147483645 (Integer.MAX_VALUE-1). في التكرار التالي، تصبح القيمة 2147483645، ثم 2147483646، ثم -2147483648، -2147483647... وهكذا.

المهمة 2: إنشاء تعليق قابل للتنفيذ

حسنا، نحن هنا! منذ الدروس الأولى، سمعنا أن التعليقات لا يتم تنفيذها. ولهذا السبب يطلق عليهم التعليقات. نعتقد أن حل هذه المهمة لن يكون دائمًا واضحًا لمبرمجي Java، حتى ذوي الخبرة. ومع ذلك، هناك طريقة واحدة صعبة (لكنها "قانونية") لجعل JVM ينفذ تعليقًا. هل يمكنك الشعور بالمكان الذي نتجه إليه؟ حاول ان تتوقع!

حل

كود جافا لهذه المهمة:
public class ExecutableComment {
    public static void main(String[] args) {
        // The comment below will be executed!
        // \u000d System.out.println("executable comment");
    }
}
إذا أدخلنا كود Java هذا في IDE، فإليك ما سنحصل عليه:
executable comment
وذلك لأن مترجم Java يفسر حرف Unicode \u000dكسطر جديد، ويقرأ الكود الخاص بنا مثل هذا: كود Java لهذه المهمة، كما يتم تفسيره بواسطة المترجم:
public class ExecutableComment {
    public static void main(String[] args) {
        // The comment below will be executed!
        // \u000d
        System.out.println("comment executed");
    }
}

المهمة 3: إنشاء حلقة مسماة

إليكم عضو آخر في السلسلة بعنوان "مشكلات برمجة جافا العملية للأبقار الكروية". بمعنى أنه من غير الواضح سبب ضرورة ذلك: فمن غير المحتمل أن تتأذى الحلقة من حقيقة أنها لم تُمنح اسمًا. على أية حال، هذا مهم لسبب آخر: اللغة تتيح لك تسمية الحلقة.

حل

ملحوظة: هذه "الأسماء" معروفة لدى بعض الأشخاص باسم "التسميات"، ولا ينصح باستخدامها عمليًا. كود جافا لإظهار حلقة مسماة
public class NamedLoop {
    public static void main(String[] args) {
        loop1:
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i == 3)
                    break loop1;
                System.out.println("i = " + i + " j = " + j);
            }
        }
    }
}
إليك ما سيتم إخراجه إذا قمت بتشغيل البرنامج:
i = 0 j = 0
i = 0 j = 1
i = 0 j = 2
i = 0 j = 3
i = 0 j = 4
i = 1 j = 0
i = 1 j = 1
i = 1 j = 2
i = 1 j = 3
i = 1 j = 4
i = 2 j = 0
i = 2 j = 1
i = 2 j = 2
i = 2 j = 3
i = 2 j = 4
يمكنك أيضًا استخدام الكلمة الأساسية continue للعودة إلى بداية الحلقة المسماة. وإذا لزم الأمر، يمكنك استخدام break(أو continue) في حلقة متداخلة if-elseلتفكيك forعدة حلقات باستخدام if-else. سيساعد هذا في تجنب إنشاء عدد كبير من العلامات والتحقق منها في عبارة if-elseلتحديد ما إذا كنت تريد الاستمرار في الحلقة الداخلية أو الخروج منها.

المهمة 4: ابحث عن نسخة مكررة واحدة في مصفوفة من الأعداد الصحيحة

لقد تم إعطاؤك مصفوفة أعداد صحيحة (أو مصفوفة ArrayList، إذا كنت تفضل ذلك) تحتوي على كل Integerمن 1 إلى 100. تحتوي المصفوفة على عنصر واحد مكرر واحد فقط. كيف وجدته؟ من الشائع أن يحصل مبرمج Java على هذا النوع من المهام مقارنة بالمهام الثلاثة السابقة. لأنه يتعلق بالمنطق وليس بمعرفتك بالتفاصيل الدقيقة للغة التي نادرًا ما تستخدم. إن دافعك الجامح الأول لاستخدام القوة الغاشمة سوف يمر بسرعة عندما يبدأ عقلك في العمل أو تدرك "أنا مبرمج. أنا ذكي". المشكلة الوحيدة هي أنه أثناء المقابلة، عندما تكون تحت الضغط، قد لا يحدث هذا. لذا فكر الآن قبل أن تنظر إلى الحل!

ها هي الخوارزمية

احسب مجموع كل الأرقام من 1 إلى 100. نعتقد أنك تعرف كيف يمكنك القيام بذلك (على سبيل المثال، باستخدام طريقة غاوس الشهيرة). الآن احسب مجموع العناصر في المصفوفة أو ArrayList. و... اطرح المجموع الأول من الثاني. البنغو! الرقم الناتج هو قيمة العنصر المكرر. كود Java لهذه المهمة باستخدام ملف ArrayList.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class FindDuplicate {
    private static void findDuplicate(List<Integer> elements) {

        int distinctSum = elements.stream().distinct().mapToInt(e -> e).sum();
// Find the sum of all list elements
        int totalSum = elements.stream().mapToInt(e -> e).sum();
        System.out.println("The repeated element is: " + (totalSum - distinctSum));
    }

    public static void main(String[] args) {
// Create a list of sequential elements in the interval [1..101).
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
// Add the value 23 at index 53
        elements.set(53, 23);
        findDuplicate(elements);
    }
}

حل آخر

import java.util.List;
import java.util.ArrayList;

public class Duplicate {

    public int findDuplicateNumber(List<Integer> numbers) {

        int highestNumber = numbers.size() - 1;
        int total = getSum(numbers);
        int duplicate = total - (highestNumber * (highestNumber + 1) / 2);
        return duplicate;
    }

    public int getSum(List<Integer> numbers) {

        int sum = 0;
        for (int num : numbers) {
            sum = sum + num;
        }
        return sum;
    }

    public static void main(String a[]) {
        List <Integer> numbers = new ArrayList <Integer>();
        for (int i = 1; i < 100; i++) {
            numbers.add(i);
        }
        // Add a duplicate to the list
        numbers.add(25);
        Duplicate dn = new Duplicate();
        System.out.println("The repeated element is: " + dn.findDuplicateNumber(numbers));
    }
}

المهمة 5: البحث عن نسخة مكررة غير فريدة في مجموعة من الأعداد الصحيحة

إذا كانت المهمة السابقة سهلة للغاية بالنسبة لك، فحاول القيام بهذه المهمة: يتم إعطاؤك قائمة من الأعداد الصحيحة من 1 إلى 100. يوجد بها تكرارات (أكثر من واحد). كيف تجد العناصر التي تتكرر أكثر من مرة (ابحث عن العناصر وحدد عدد مرات حدوثها)؟

حل

الحل المنطقي هنا هو استخدام شيء مثل HashMap، لأنه يخزن البيانات في أزواج ذات قيمة مفتاحية. رمز هذه المهمة في Java:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class SomeDuplicates {
    private static void findDuplicates(List<Integer> elements) {
        HashMap <Integer, Integer> duplicates = new HashMap <>();
// Use the following rule to populate the Map duplicates:
// the key is the element value, and the value is the number of times it occurs
        elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
// Remove any elements that don't occur more than once from the Map duplicates
// and store the result as a list (to make it easy to work with in the next step)
        List <Map.Entry <Integer, Integer> >
        result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
// Write the results for all elements to the result list
        result.forEach(e -> System.out.println(String.format("Element %d  occurs %d times", e.getKey(), e.getValue())));
    }

    public static void main(String[] args) {
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
        elements.set(97, 23);
        elements.set(27, 51);
        elements.set(99, 23);
        findDuplicates(elements);
    }
}

خاتمة

هناك الكثير من الأنواع المختلفة لمهام Java العملية، ولا تعرف نوع الألغاز التي سيطلب منك القائم بإجراء المقابلة حلها. لكن أي صاحب عمل عاقل يدرك أن قدرتك على إكمال المهام العملية الحقيقية ، مثل تلك التي ستواجهها أثناء العمل، أهم بكثير من قدرتك على حل الأسئلة الخادعة. لذا افعل هذه قدر الإمكان. لهذا السبب أنشأنا CodeGym. تم استخدام المواد من geeksforgeeks لإنشاء هذه المقالة.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION