Cùng nhau chia sẻ, trả lời những câu hỏi khi đi xin việc

nguyenson197

Member
5/12/11
202
21
18
Thái Bình
khmt1-k4.com
Mình lập topic mong mọi người hưởng ứng, cùng nhau chia sẻ, trả lời những câu hỏi khi đi xin việc về java.
Trước tiên mình có 2 câu mà mới nghe ngóng được từ ông anh.
1. Theo bạn lớp private có kế thừa được không
2. Phân biệt abstract và interface
Cập nhật
==== Java Core
- Lập trình hướng đối tượng là gì ?
- Tính đa hình, tính kế thừa là gì ?

==== Về phần cơ sở dữ liệu
- Nêu các bước để thiết kế csdl.
- Khi nào dùng innerjoin, left join, right join?
- Keyword Having dùng trong trường hợp nào ?
Cập nhật 31/8/2012
Tại sao khi so sánh 2 chuỗi ta nên dụng phương thức equal() mà không nên == hay != để so sánh

Anh em nào có câu hỏi nào thì cùng đưa lên thảo luận luôn nhá. Mình sẽ cập nhật câu hỏi thường xuyên ở đây
 
  • Like
Reactions: Sói Xám

pirent

New Member
12/4/12
4
2
3
Theo ý kiến của mình thì:
1. Nếu class đó là private inner class thì inner class khác cùng trong 1 outer class vẫn kế thừa được. Còn nếu đó là outer class thì mình nhớ là ko khai báo private đc, chỉ đc để public access hay default access
2. Abstract class thì bên trong nó vẫn có vài hiện thực nhỏ đc, còn interface thì chỉ toàn khai báo, ko có hiện thực bên trong.
Một class bất kì thì chỉ extends được 1 abstract class, còn interface thì có thể implements nhiều cái

3. Overload là cùng một method nhưng có danh sách tham số khác, còn Override thì signature giống nhau nhưng khác kiểu hiện thực bên trong
 

nguyenson197

Member
5/12/11
202
21
18
Thái Bình
khmt1-k4.com
1. class private vẫn kế thừa được nhưng lớp cha và lớp con đều phải nằm trong 1 class khác.
2. Abstract class thì chứa cả tên phương thức và có lệnh nằm trong phương thức. Còn Interface chỉ chứa tên phương thức. Một class chỉ được thực thi 1 Abstract nhưng lại thực thi được nhiều Interface
3. Overload là các phương thức cùng tên nhưng khác nhau ở tham số và giá trị trả về. Override dùng cho lớp mà kế thừa từ lớp cha. Override ghi đè lên 1 phương thức giống nó đã được xây dựng ở lớp cha.
Các bác thảo luận cho ý kiến
Đây là đoạn code bài 1 mình code
PHP:
public class A {

    private class B {

        public void show() {
        }
    }

    private class C extends B {

        @Override
        public void show() {
        }
    }
}
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,642
309
83
==== Java Core
- Lập trình hướng đối tượng là gì ?
- Tính đa hình, tính kế thừa là gì ?

==== Về phần cơ sở dữ liệu
- Nêu các bước để thiết kế csdl.
- Khi nào dùng innerjoin, left join, right join?
- Keyword Having dùng trong trường hợp nào ?

Các phần còn lại sẽ dựa vào trong CV của bạn ghi những gì, họ sẽ hỏi vài câu hỏi để xem bạn có hiểu biết về nó không là đc.
Ví dụ: Hibernate là gì? Struts/Spring là gì?

Nói chung, các câu hỏi pv thường xoáy vào các câu hỏi ở Java Core, những câu trả lời rất đơn giản, nhưng lại mơ hồ, khái quát nên dễ bị dính bẫy lắm.
Bạn chủ topic nên tập trung câu hỏi và câu trả lời ở post 1 để tiện theo dõi.
 
  • Like
Reactions: nguyenson197

pirent

New Member
12/4/12
4
2
3
3. Overload là các phương thức cùng tên nhưng khác nhau ở tham số và giá trị trả về.
Theo mình thì overload không phân biệt được qua trị trả về. Với 2 method như sau:

PHP:
void f(){}

int f(){ return 1;}
Hai method này sẽ hoạt động nếu như mình quan tâm trị trả về của nó như int x = f();, còn nếu mình gọi method này chỉ không quan tâm trị trả về, chỉ dùng nó để thực hiện hiệu ứng lề thì khi gọi f(), mình sẽ không biết là nó sẽ gọi method f() nào.
 

nasural

Active Member
11/2/11
379
87
28
abstract và interface đều định ngĩa các phương thức, nhưng trong class kế thừa thì, class kế thừa abstract không nhất thiết phải override phương thức lớp cha, còn interface thì phải override toàn bộ.
abtract class quy định các phương thức mà lớp con có thể sử dụng, còn interface thì quy định các phương thức mà lớp con phải sử dụng(đoạn này là suy ra:P)
 
  • Like
Reactions: nguyenson197

kokichi88

Member
3/5/12
60
12
8
Mình thấy đa số các câu hỏi đi về định nghĩa với khái niệm nhiều quá, ai phỏng vấn mà lại hỏi những cái khái niệm như kiểu học thuộc thế này chứ. Mình thấy nên tập trung vào các câu hỏi dạng gợi mở hơn như:
- Khi nào nên dùng abstract class khi nào nên dùng interface???
- Xin đóng góp 1 câu hỏi là: hãy viết 1 hàm đổi giá trị 2 biến : char c1 = 'a', char c2 = 'b' sau cho tối ưu nhất về hiệu năng và bộ nhớ :).
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,642
309
83
@kokichi88: vâng, mấy câu hỏi đó là đc phỏng vấn hoài đó bạn, đặc biệt là câu thế nào là lập trình hướng đối tượng. Mình đã đi pv 4 cty chuyên về java, hết 4 là có câu thế nào là oop.
- Cái câu lúc nào dùng abstract với interface thì nó thiên về thiết kế phần mềm hơn. Cái abstract, dùng nó thường là với các lớp entities, domains, controllers kế thừa nhau do có cùng chức năng và có một vài phương thức chung. Còn interface hỗ trợ cho tính linh động của phần mềm.
- Còn câu kia, có cái topic thảo luận vấn đề swap này rồi và mình chọn tạo một class chứa 2 biến char
 
  • Like
Reactions: nguyenson197

kokichi88

Member
3/5/12
60
12
8
@kokichi88: vâng, mấy câu hỏi đó là đc phỏng vấn hoài đó bạn, đặc biệt là câu thế nào là lập trình hướng đối tượng. Mình đã đi pv 4 cty chuyên về java, hết 4 là có câu thế nào là oop.
- Cái câu lúc nào dùng abstract với interface thì nó thiên về thiết kế phần mềm hơn. Cái abstract, dùng nó thường là với các lớp entities, domains, controllers kế thừa nhau do có cùng chức năng và có một vài phương thức chung. Còn interface hỗ trợ cho tính linh động của phần mềm.
- Còn câu kia, có cái topic thảo luận vấn đề swap này rồi và mình chọn tạo một class chứa 2 biến char
Mình không nói hỏi vậy là không được mà, mình chỉ muốn nói là nên hướng tới tính gợi mở, logic trong câu hỏi hơn là mang tính khái niệm ( kể cả hỏi khái niệm thì cũng có những cách diễn đạt khác).
- --> Cái này hình như bạn chưa đọc kĩ câu hỏi của mình : "Xin đóng góp 1 câu hỏi là: hãy viết 1 hàm đổi giá trị 2 biến : char c1 = 'a', char c2 = 'b' sau cho tối ưu nhất về hiệu năng và bộ nhớ"
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,642
309
83
Hiểu đấy chứ, cái vấn đề swap giá trị này có cái topic bàn về rồi. Do tính chất truyền tham trị của java, cho nên nó chỉ đổi trong hàm, lúc đi ra ko có gì khác biệt. Cho nên mình mới chọn cách tạo một object khác chỉ chứa 2 char này. Còn vấn đề swap thì còn cách nào khác mà tốt hơn so với tạo biến trung gian ko ?
Bạn có thể cho mọi người biết cách của bạn??
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,642
309
83
Yêu cầu là tạo một hàm, bạn thử xem ?
 

kokichi88

Member
3/5/12
60
12
8
Ai dà có vẻ mình viết không rõ nghĩa nên gây hiểu lầm:
- Thứ nhất mình có nói là bắt buộc phải dùng java hay ngôn ngữ bất kì gì đâu, các bạn có thể dùng giả mã được mà.
- Thứ 2: mình xin lỗi vì sự không rõ nghĩa ở đây. Khái niệm hàm ở đây không phải là hàm chứa input là 2 biến vào, nó là hàm thực hiện 1 nhiệm vụ như đề bài thôi. Ví dụ như
Code:
function testA(){
char c1 = 'a';
char c2 = 'b';
// do something here

print(c1) // 'b'
print(c2) // 'a'
}
Ngoài ra mình thấy các bạn học java thường hay bị hiểu nhầm khái niệm pass by valuepass by reference. Xin nhắc lại là trong java tất cả đều là pass by value.
Các bạn có thể tham khảo 1 số tài liệu ở đây.
 

nguyenson197

Member
5/12/11
202
21
18
Thái Bình
khmt1-k4.com
Topic nào là để chia sẻ câu trả lời phỏng vấn xin việc java mà bạn
Thế bạn tham khảo cho mình đoạn code này xem nó có truyền tham trị không nha
PHP:
public static void main(String[] args) {
        JButton btn1=new JButton("Button1");
        JButton btn2=btn1;
        btn2.setText("NewText");
        System.out.println(btn1.getText());
    }
Bạn đoán được output ra là gì không
 

dinhlebieu

New Member
11/11/11
3
2
3
Mình thấy đa số các câu hỏi đi về định nghĩa với khái niệm nhiều quá, ai phỏng vấn mà lại hỏi những cái khái niệm như kiểu học thuộc thế này chứ. Mình thấy nên tập trung vào các câu hỏi dạng gợi mở hơn như:
- Khi nào nên dùng abstract class khi nào nên dùng interface???
- Xin đóng góp 1 câu hỏi là: hãy viết 1 hàm đổi giá trị 2 biến : char c1 = 'a', char c2 = 'b' sau cho tối ưu nhất về hiệu năng và bộ nhớ :).
Mình lập topic mong mọi người hưởng ứng, cùng nhau chia sẻ, trả lời những câu hỏi khi đi xin việc về java.
Trước tiên mình có 2 câu mà mới nghe ngóng được từ ông anh.
1. Theo bạn lớp private có kế thừa được không
2. Phân biệt abstract và interface
Cập nhật
==== Java Core
- Lập trình hướng đối tượng là gì ?
- Tính đa hình, tính kế thừa là gì ?

==== Về phần cơ sở dữ liệu
- Nêu các bước để thiết kế csdl.
- Khi nào dùng innerjoin, left join, right join?
- Keyword Having dùng trong trường hợp nào ?
Anh em nào có câu hỏi nào thì cùng đưa lên thảo luận luôn nhá. Mình sẽ cập nhật câu hỏi thường xuyên ở đây
Khác nhau của abstract và interface
abstract trong lớp trừu tượng có thể triển khai các phương thức khác có chứa nội dung và phải chứa các phương thức trừu tượng không chứa nội dung,Muốn dẫn xuất lớp trừu tượng phải dùng từ khóa extends và lớp đó phải triển khai tât cả các phương thức trừu tượng
public abstract class truutuong
{
//Phương thức thường có triển khai
public double DT()
{
return 0;
}
//Phương thức trừu tượng
public abstract String Getname();
}

interface thì là dạng đặc biệt của trừu tượng có chứa các thuộc tính hằng và chứa các phương thức không triển khai nội dung, một lớp muốn triển khai giao diên thì dùng từ khóa implements và lớp đó phải triển khai tất cả các phương thức trong giao diện
public interface Giaodien()
{
//Khai bao hang
public final double pi=3.14;
//phương thức không triển khai
public double DT();
public double CV();
}
 
  • Like
Reactions: nguyenson197