forked from fuzhengwei/interview
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
小傅哥,Java 面经手册 • 拿大厂Offer,更新28、29、30、31
- Loading branch information
1 parent
eabf6b9
commit 9b368e9
Showing
11 changed files
with
323 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,3 +2,4 @@ | |
/interview-04/interview-04.iml | ||
/interview-07/interview-07.iml | ||
/interview-05/interview-05.iml | ||
/ApiTest/ApiTest.iml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<parent> | ||
<artifactId>interview</artifactId> | ||
<groupId>org.itstack</groupId> | ||
<version>1.0-SNAPSHOT</version> | ||
</parent> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<artifactId>interview-31</artifactId> | ||
|
||
<properties> | ||
<!-- Common --> | ||
<jdk.version>1.8</jdk.version> | ||
<sourceEncoding>UTF-8</sourceEncoding> | ||
<!-- Open Service --> | ||
<commons-lang3.version>3.8.1</commons-lang3.version> | ||
<fastjson.version>1.2.60</fastjson.version> | ||
<junit.version>4.12</junit.version> | ||
<logback.version>1.0.9</logback.version> | ||
<slf4j.version>1.7.7</slf4j.version> | ||
<spring.version>4.3.24.RELEASE</spring.version> | ||
<servlet-api.version>2.5</servlet-api.version> | ||
</properties> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>org.aspectj</groupId> | ||
<artifactId>aspectjweaver</artifactId> | ||
<version>1.6.12</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.aspectj</groupId> | ||
<artifactId>aspectjrt</artifactId> | ||
<version>1.6.12</version> | ||
</dependency> | ||
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> | ||
<dependency> | ||
<groupId>org.apache.commons</groupId> | ||
<artifactId>commons-lang3</artifactId> | ||
<version>${commons-lang3.version}</version> | ||
</dependency> | ||
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> | ||
<dependency> | ||
<groupId>com.alibaba</groupId> | ||
<artifactId>fastjson</artifactId> | ||
<version>${fastjson.version}</version> | ||
</dependency> | ||
<!-- https://mvnrepository.com/artifact/junit/junit --> | ||
<dependency> | ||
<groupId>junit</groupId> | ||
<artifactId>junit</artifactId> | ||
<version>${junit.version}</version> | ||
<scope>test</scope> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>ch.qos.logback</groupId> | ||
<artifactId>logback-classic</artifactId> | ||
<version>${logback.version}</version> | ||
<exclusions> | ||
<exclusion> | ||
<artifactId>slf4j-api</artifactId> | ||
<groupId>org.slf4j</groupId> | ||
</exclusion> | ||
</exclusions> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.slf4j</groupId> | ||
<artifactId>slf4j-api</artifactId> | ||
<version>${slf4j.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-core</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-test</artifactId> | ||
<version>${spring.version}</version> | ||
<scope>test</scope> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-context</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-context-support</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-beans</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-jdbc</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-aop</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-aspects</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-web</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-aspects</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>org.springframework</groupId> | ||
<artifactId>spring-tx</artifactId> | ||
<version>${spring.version}</version> | ||
</dependency> | ||
<dependency> | ||
<groupId>javax.servlet</groupId> | ||
<artifactId>servlet-api</artifactId> | ||
<version>${servlet-api.version}</version> | ||
<scope>provided</scope> | ||
</dependency> | ||
</dependencies> | ||
|
||
</project> |
18 changes: 18 additions & 0 deletions
18
interview-31/src/main/java/org/itstack/interview/Bean_A.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package org.itstack.interview; | ||
|
||
public class Bean_A { | ||
|
||
private Bean_B bean_b; | ||
|
||
public Bean_B getBean_b() { | ||
return bean_b; | ||
} | ||
|
||
public void setBean_b(Bean_B bean_b) { | ||
this.bean_b = bean_b; | ||
} | ||
|
||
public void sayHello(String name) { | ||
System.out.println("hello, " + name); | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
interview-31/src/main/java/org/itstack/interview/Bean_B.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package org.itstack.interview; | ||
|
||
public class Bean_B { | ||
|
||
private Bean_A bean_a; | ||
|
||
public Bean_A getBean_a() { | ||
return bean_a; | ||
} | ||
|
||
public void setBean_a(Bean_A bean_a) { | ||
this.bean_a = bean_a; | ||
} | ||
|
||
public void sayHello(String name) { | ||
System.out.println("hello, " + name); | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
interview-31/src/main/java/org/itstack/interview/MyAspect.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
package org.itstack.interview; | ||
|
||
public class MyAspect { | ||
|
||
public void before() { | ||
System.out.println("前置增强处理..."); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<beans xmlns="http://www.springframework.org/schema/beans" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" | ||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd" | ||
default-autowire="byName"> | ||
|
||
<bean id="bean_a" class="org.itstack.interview.Bean_A"> | ||
<property name="bean_b" ref="bean_b"/> | ||
</bean> | ||
|
||
<bean id="bean_b" class="org.itstack.interview.Bean_B"> | ||
<property name="bean_a" ref="bean_a"/> | ||
</bean> | ||
|
||
<bean id="myAspect" class="org.itstack.interview.MyAspect"/> | ||
|
||
<aop:config> | ||
<aop:aspect ref="myAspect"> | ||
<aop:before method="before" pointcut="execution(public void org.itstack.interview.*.sayHello(..))"/> | ||
</aop:aspect> | ||
</aop:config> | ||
|
||
</beans> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<beans xmlns="http://www.springframework.org/schema/beans" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" | ||
default-autowire="byName"> | ||
|
||
<bean id="bean_a" class="org.itstack.interview.Bean_A"> | ||
<property name="bean_b" ref="bean_b"/> | ||
</bean> | ||
|
||
<bean id="bean_b" class="org.itstack.interview.Bean_B"> | ||
<property name="bean_a" ref="bean_a"/> | ||
</bean> | ||
|
||
</beans> |
28 changes: 28 additions & 0 deletions
28
interview-31/src/test/java/org/itstack/interview/test/ApiTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
package org.itstack.interview.test; | ||
|
||
import org.itstack.interview.Bean_A; | ||
import org.junit.Test; | ||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import org.springframework.beans.factory.BeanFactory; | ||
import org.springframework.context.support.ClassPathXmlApplicationContext; | ||
|
||
public class ApiTest { | ||
|
||
private Logger logger = LoggerFactory.getLogger(ApiTest.class); | ||
|
||
@Test | ||
public void test_alias() { | ||
BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring-config.xml"); | ||
Bean_A bean_a = beanFactory.getBean("bean_a", Bean_A.class); | ||
logger.info("获取 Bean 通过别名:{}", bean_a.getBean_b()); | ||
} | ||
|
||
@Test | ||
public void test_aop(){ | ||
BeanFactory beanFactory = new ClassPathXmlApplicationContext("spring-config-aop.xml"); | ||
Bean_A bean_a = beanFactory.getBean("bean_a", Bean_A.class); | ||
logger.info("获取 Bean 通过别名:{}", bean_a.getBean_b()); | ||
} | ||
|
||
} |
64 changes: 64 additions & 0 deletions
64
interview-31/src/test/java/org/itstack/interview/test/CircleTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
package org.itstack.interview.test; | ||
|
||
import java.lang.reflect.Field; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
import java.util.concurrent.ConcurrentHashMap; | ||
|
||
public class CircleTest { | ||
|
||
private final static Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256); | ||
|
||
public static void main(String[] args) throws Exception { | ||
Class[] classes = {A.class, B.class}; | ||
for (Class clazz : classes) { | ||
getBean(clazz); | ||
} | ||
System.out.println(getBean(B.class).getA()); | ||
System.out.println(getBean(A.class).getB()); | ||
} | ||
|
||
private static <T> T getBean(Class<T> beanClass) throws Exception { | ||
String beanName = beanClass.getSimpleName().toLowerCase(); | ||
if (singletonObjects.containsKey(beanName)) { | ||
return (T) singletonObjects.get(beanName); | ||
} | ||
|
||
Object obj = beanClass.getDeclaredConstructor().newInstance(); | ||
singletonObjects.put(beanName, obj); | ||
|
||
Field[] fields = obj.getClass().getDeclaredFields(); | ||
for (Field field : fields) { | ||
field.setAccessible(true); | ||
Class<?> fieldClass = field.getType(); | ||
String fieldBeanName = fieldClass.getSimpleName().toLowerCase(); | ||
field.set(obj, singletonObjects.containsKey(fieldBeanName) ? singletonObjects.get(fieldBeanName) : getBean(fieldClass)); | ||
} | ||
return (T) obj; | ||
} | ||
|
||
} | ||
|
||
class A { | ||
private B b; | ||
|
||
public B getB() { | ||
return b; | ||
} | ||
|
||
public void setB(B b) { | ||
this.b = b; | ||
} | ||
} | ||
|
||
class B { | ||
private A a; | ||
|
||
public A getA() { | ||
return a; | ||
} | ||
|
||
public void setA(A a) { | ||
this.a = a; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters