Skip to content

Commit

Permalink
小傅哥,Java 面经手册 • 拿大厂Offer,更新28、29、30、31
Browse files Browse the repository at this point in the history
  • Loading branch information
fuzhengwei committed May 1, 2021
1 parent eabf6b9 commit 9b368e9
Show file tree
Hide file tree
Showing 11 changed files with 323 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
/interview-04/interview-04.iml
/interview-07/interview-07.iml
/interview-05/interview-05.iml
/ApiTest/ApiTest.iml
6 changes: 3 additions & 3 deletions ApiTest/src/test/java/org/itstack/interview/test/ApiTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.itstack.interview.test;

import org.junit.Test;
import sun.misc.Unsafe;

/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
Expand All @@ -9,9 +10,8 @@
*/
public class ApiTest {

@Test
public void test_() {

public static void main(String[] args) {
// Unsafe.loadFence();
}

}
139 changes: 139 additions & 0 deletions interview-31/pom.xml
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 interview-31/src/main/java/org/itstack/interview/Bean_A.java
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 interview-31/src/main/java/org/itstack/interview/Bean_B.java
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);
}
}
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("前置增强处理...");
}

}
23 changes: 23 additions & 0 deletions interview-31/src/main/resources/spring-config-aop.xml
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>
15 changes: 15 additions & 0 deletions interview-31/src/main/resources/spring-config.xml
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 interview-31/src/test/java/org/itstack/interview/test/ApiTest.java
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());
}

}
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;
}
}
6 changes: 5 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>ApiTest</module>
<module>interview-04</module>
<module>interview-05</module>
<module>interview-07</module>
<module>interview-08</module>
<module>interview-09</module>
<module>interview-10</module>
<module>ApiTest</module>
<module>interview-11</module>
<module>interview-12</module>
<module>interview-13</module>
Expand All @@ -36,6 +36,10 @@
<module>interview-01</module>
<module>interview-02</module>
<module>interview-03</module>
<module>interview-28</module>
<module>interview-29</module>
<module>interview-30</module>
<module>interview-31</module>
</modules>

<dependencies>
Expand Down

0 comments on commit 9b368e9

Please sign in to comment.