Rumah  >  Artikel  >  Java  >  Apakah soalan dan jawapan temu bual untuk SpringBoot?

Apakah soalan dan jawapan temu bual untuk SpringBoot?

WBOY
WBOYke hadapan
2023-05-13 14:16:061308semak imbas

1. Apakah Spring Boot?

Spring Boot ialah sub-projek di bawah organisasi sumber terbuka Spring Ia merupakan penyelesaian sehenti untuk komponen Spring Ia terutamanya memudahkan kesukaran menggunakan
Spring, menjimatkan konfigurasi berat dan menyediakan pelbagai permulaan. . supaya pembangun boleh bermula dengan cepat.

2. Mengapa menggunakan SpringBoot

Pembangunan pantas, penyepaduan pantas, konfigurasi dipermudahkan, bekas perkhidmatan terbenam

3 Perbezaan antara SpringBoot dan SpringCloud

SpringBoot Ia adalah rangka kerja Spring yang dibangunkan dengan pantas SpringCloud adalah rangka kerja mikro yang lengkap bergantung pada SpringBoot.

4. Apakah kelebihan Spring Boot?

Spring Boot terutamanya mempunyai kelebihan berikut: Ia mudah untuk dimulakan, meningkatkan kecekapan pembangunan dan menyediakan rangka kerja pembangunan yang lebih pantas dan ringkas untuk pembangunan Spring. Berfungsi di luar kotak, jauh dari konfigurasi yang menyusahkan. Ia menyediakan satu siri fungsi bukan perniagaan yang biasa untuk projek berskala besar, seperti pelayan terbenam, pengurusan keselamatan, pemantauan data pengendalian, pemeriksaan kesihatan dan konfigurasi luaran, dsb. Ringkasan SpringBoot adalah untuk menjadikan pengekodan lebih mudah, konfigurasi lebih mudah, penggunaan lebih mudah, pemantauan lebih mudah, dsb.

5. Apakah anotasi teras Spring Boot?

Apa anotasi yang terutamanya terdiri daripada anotasi? Anotasi pada kelas permulaan ialah @SpringBootApplication, yang juga merupakan anotasi teras Spring Boot Kombinasi utama termasuk tiga anotasi berikut: @SpringBootConfiguration: menggabungkan anotasi @Configuration untuk melaksanakan fungsi fail konfigurasi. @EnableAutoConfiguration: Hidupkan fungsi konfigurasi automatik atau matikan pilihan konfigurasi automatik, contohnya:
@ComponentScan: Pengimbasan komponen spring.
java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。6. Apakah rangka kerja pengelogan yang disokong Spring Boot? Apakah rangka kerja pengelogan yang disyorkan dan lalai?

Spring Boot menyokong Java Util Logging, Log4j2 dan Lockback sebagai rangka kerja pengelogan Jika anda menggunakan Starters untuk melancarkan

starter, Spring Boot akan menggunakan Logback sebagai rangka kerja pengelogan lalai, tetapi ia menyokong tidak kira apa. jenis rangka kerja pengelogan itu. Keluarkan fail konfigurasi

ke konsol atau fail.

7. Cara SpringBoot Starter berfungsi

Saya secara peribadi faham bahawa SpringBoot terdiri daripada pelbagai Pemula. Kami juga boleh membangunkan Anotasi @SpringBootApplication secara automatik apabila springBoot bermula. Baca

fail spring.factories dalam setiap pemula Fail ini mengkonfigurasi semua kacang yang perlu dibuat dalam bekas spring dan melakukan konfigurasi automatik untuk menyuntik

kacang ke dalam SpringContext // (SpringContext ialah Konfigurasi Spring. fail)

8. Apakah ciri baharu Spring Boot 2.X? Bagaimanakah ia berbeza dengan 1.X?

Perubahan konfigurasi Naik taraf versi JDK Naik taraf perpustakaan kelas pihak ketiga Pengaturcaraan Spring Responsif menyokong pengikatan atribut konfigurasi sokongan HTTP/2 Lebih banyak penambahbaikan dan peningkatan

9 >

thymeleaf, freemarker, jsp, JSP tidak disyorkan secara rasmi dan akan mempunyai sekatan

10 Kelemahan SpringBoot

Saya rasa ia memalukan pada masa ini, saya rasa SpringBoot tidak mempunyai kekurangan. Apabila saya menemui satu, saya fikir ia adalah kerana saya tidak perlu mengkonfigurasinya sendiri, jadi sukar untuk mencari apabila ralat dilaporkan.

11. Apakah cara untuk menjalankan Spring Boot?

Pakej dengan arahan atau masukkan ke dalam bekas untuk dijalankan

Gunakan pemalam Maven/Gradle untuk menjalankan

Laksanakan secara langsung kaedah utama untuk menjalankan


12 perlukan bekas bebas untuk dijalankan?

Tidak perlu, ada bekas terbina dalam seperti Tomcat/Jetty.

13 Apakah cara untuk mendayakan ciri Spring Boot?

Warisi projek spring-boot-starter-parent

Import kebergantungan projek spring-boot-dependencies

14. Apakah cara untuk melaksanakan penggunaan panas dalam SpringBoot?

Penyerahan panas bermakna kod latar belakang operasi boleh dikemas kini secara automatik kepada projek yang sedang berjalan tanpa menjalankan semula projek SpringBoot

Terdapat dua cara utama:

Spring Loaded

Spring-boot. -devtools

15 Penggunaan perkara SpringBoot

Perkara SpringBoot adalah sangat mudah, mula-mula gunakan anotasi EnableTransactionManagement untuk membuka perkara itu, dan kemudian tambahkan anotasi Transactional pada

kaedah Perkhidmatan. .

16. Kaedah panggilan tak segerak Async

Menggunakan panggilan tak segerak dalam SpringBoot adalah sangat mudah Anda hanya perlu menggunakan anotasi @Async pada kaedah untuk mencapai panggilan

tak segerak bagi kaedah tersebut. Nota: Anda perlu menambah @EnableAsync pada kelas permulaan untuk membuat anotasi panggilan tak segerak @Async berkuat kuasa.

17. Bagaimana untuk menjalankan beberapa kod tertentu apabila Spring Boot bermula?

boleh melaksanakan antara muka ApplicationRunner atau CommandLineRunner Kedua-dua antara muka ini dilaksanakan dengan cara yang sama

hanya menyediakan satu kaedah larian

18 Boot?

Spring Boot boleh mengikat pembolehubah melalui @PropertySource, @Value, @Environment, @ConfigurationPropertie anotasi

19. Apakah itu JavaConfig?

Spring JavaConfig ialah produk komuniti Spring Ia diperkenalkan pada Spring 3.0 Ia menyediakan
kaedah Java tulen untuk mengkonfigurasi bekas Spring IOC. Jadi ia membantu mengelakkan penggunaan konfigurasi XML. Kelebihan menggunakan JavaConfig ialah:
Konfigurasi berorientasikan objek. Oleh kerana konfigurasi ditakrifkan sebagai kelas dalam JavaConfig, pengguna boleh memanfaatkan sepenuhnya ciri berorientasikan objek dalam Java. Satu kelas konfigurasi boleh mewarisi yang lain, mengatasi kaedah @Beannya, dsb.
Kurangkan atau hapuskan konfigurasi XML. Faedah konfigurasi luaran berdasarkan prinsip suntikan kebergantungan telah terbukti. Walau bagaimanapun, ramai pembangun tidak mahu bertukar-tukar antara XML dan Java. JavaConfig menyediakan pembangun dengan cara Java tulen untuk mengkonfigurasi bekas Spring serupa dengan konsep konfigurasi XML. Dari perspektif teknikal, adalah mungkin untuk mengkonfigurasi bekas menggunakan hanya kelas konfigurasi JavaConfig, tetapi dalam praktiknya ramai orang percaya bahawa mencampurkan dan memadankan JavaConfig dengan XML adalah ideal.
Taip selamat dan mesra pemfaktoran semula. JavaConfig menyediakan cara selamat jenis untuk mengkonfigurasi bekas Spring. Terima kasih kepada sokongan Java
5.0 untuk generik, kacang kini boleh diambil mengikut jenis dan bukannya dengan nama, tanpa sebarang cast atau carian berasaskan rentetan.
Konfigurasi Java yang biasa digunakan:
@Configuration: Tulis anotasi ini pada kelas untuk menunjukkan bahawa kelas ini ialah kelas konfigurasi
@ComponentScan: Tambahkan anotasi @ComponentScan pada kelas konfigurasi. Secara lalai, anotasi ini akan mengimbas semua kelas konfigurasi di bawah pakej tempat kelas ini berada, yang bersamaan dengan 611dfb857b03b245adf9fd6566a6e09a sebelumnya.
@Bean: suntikan kacang: bersamaan dengan 127fa5d65b4e2b14c909706bc7963b5d
@EnableWebMvc: bersamaan dengan xml of< ;mvc:annotation-driven>
@ImportResource: Setara dengan xml61647599771b099857d299c6bfc4255e

20. Apakah prinsip konfigurasi automatik SpringBoot

Terutamanya anotasi teras pada kelas permulaan Spring Boot, kelas konfigurasi utama anotasi SpringBootApplication Dengan kelas

konfigurasi utama ini akan mendayakan fungsi konfigurasi automatik anotasi @EnableAutoConfiguration untuk Spring Boot apabila ia dimulakan.
Dengan EnableAutoConfiguration ini, ia akan:
Memuatkan kelas autokonfigurasi yang boleh digunakan daripada fail konfigurasi META_INF/Spring.factories
Alih keluar pendua dan mengecualikan kelas yang dibawa oleh atribut exclude dan excludeName
Tapis , kembalikan kelas konfigurasi automatik yang memenuhi syarat (@Conditional)

21. Bagaimanakah anda memahami susunan pemuatan konfigurasi Spring Boot?

Dalam Spring Boot, anda boleh menggunakan kaedah berikut untuk memuatkan konfigurasi.

1.fail sifat;
2.Fail YAML;
3. Parameter baris perintah; . Apakah itu YAML?

YAML ialah bahasa siri data yang boleh dibaca manusia. Ia biasanya digunakan dalam fail konfigurasi. Berbanding dengan fail sifat, fail YAML lebih berstruktur dan kurang mengelirukan jika kita ingin
menambah sifat kompleks dalam fail konfigurasi. Ia boleh dilihat bahawa YAML mempunyai

data konfigurasi berlapis.

23. Apakah kelebihan konfigurasi YAML?


YAML kini boleh dianggap sebagai format fail konfigurasi yang sangat popular, sama ada ia adalah bahagian hadapan atau bahagian belakang, anda boleh melihat YAML konfigurasi
Tetapkan. Jadi apakah kelebihan konfigurasi YAML berbanding dengan konfigurasi sifat tradisional?

Konfigurasi tersusun, dalam beberapa senario khas, konfigurasi pesanan adalah penting

Mudah dan jelas, ia juga menyokong tatasusunan, elemen dalam tatasusunan boleh menjadi jenis data asas atau objek

Berbanding dengan Fail konfigurasi sifat, YAML mempunyai kelemahan lain, iaitu, ia tidak menyokong anotasi @PropertySource untuk mengimport

konfigurasi YAML tersuai.

24. Bolehkah Spring Boot menggunakan konfigurasi XML?

Spring Boot mengesyorkan menggunakan konfigurasi Java dan bukannya konfigurasi XML, tetapi konfigurasi XML juga boleh digunakan dalam Spring Boot melalui @ImportResource Anotasi boleh memperkenalkan XML konfigurasi.

25 Apakah fail konfigurasi teras but spring? Apakah perbezaan antara bootstrap.properties dan application.properties?

Jika anda hanya melakukan pembangunan Spring Boot, mungkin tidak mudah untuk menemui fail konfigurasi bootstrap.properties, tetapi apabila digabungkan dengan Spring Cloud, ini konfigurasi akan kerap ditemui Terutama apabila anda perlu memuatkan beberapa fail konfigurasi jauh.

Dua fail konfigurasi pada teras but spring:
bootstrap (. yml atau . properties): boostrap dimuatkan oleh ApplicationContext induk dan dimuatkan sebelum aplikasi berkuat kuasa dalam fasa but konteks aplikasi . Secara umumnya, kami akan menggunakan fail ini dalam konfigurasi Spring Cloud. Dan sifat dalam boostrap tidak boleh ditindih;

aplikasi (. yml atau . properties): dimuatkan oleh ApplicationContext, digunakan untuk konfigurasi automatik projek but spring

.

26 Apakah itu Profil Musim Bunga?

Semasa pembangunan projek, sesetengah fail konfigurasi mungkin berbeza dalam persekitaran yang berbeza seperti pembangunan, ujian atau pengeluaran, seperti sambungan pangkalan data
sambungan, konfigurasi redis, dsb. Jadi bagaimana kita menukar konfigurasi secara automatik dalam persekitaran yang berbeza? Spring menyediakan kami dengan
mekanisme profil, yang memberikan kami fungsi menukar fail konfigurasi ke belakang dan sebagainya
Profil Musim Bunga membolehkan pengguna mendaftarkan kacang berdasarkan fail konfigurasi (dev, test, prod, dll.). Jadi apabila aplikasi
sedang berjalan dalam pembangunan, hanya kacang tertentu boleh dimuatkan, manakala dalam PENGELUARAN, kacang tertentu yang lain boleh dimuatkan.
Andaikan keperluan kami ialah dokumentasi Swagger hanya tersedia dalam persekitaran QA, dan semua dokumentasi lain dilumpuhkan. Ini boleh dilakukan menggunakan fail konfigurasi. Spring Boot menjadikan kerja dengan fail konfigurasi sangat mudah.

27. Idea pemisahan sumber berbilang data SpringBoot

Mula-mula konfigurasikan dua sumber data dalam fail konfigurasi sifat, buat pemeta subpakej dan gunakan @ConfigurationProperties

untuk membaca sifat dalam properties Konfigurasi, gunakan @MapperScan untuk mendaftar ke dalam pakej pemeta yang sepadan

28. Cara menguruskan transaksi sumber berbilang data SpringBoot

Cara pertama ialah dengan menentukan transactionManager dalam @TransactionManager lapisan perkhidmatan

Transaksi yang dikonfigurasikan dalam DataSourceConfig
Yang kedua ialah menggunakan jta-atomikos untuk melaksanakan pengurusan transaksi teragih

29. Apakah kaedah untuk melindungi aplikasi Spring Boot?

Gunakan HTTPS dalam pengeluaran

Gunakan Snyk untuk menyemak kebergantungan anda
Naik taraf kepada versi terkini
Dayakan perlindungan CSRF
Gunakan Dasar Keselamatan Kandungan untuk mengelakkan serangan XSS

30. Bagaimana untuk melaksanakan keselamatan dalam aplikasi Spring Boot?

Untuk melaksanakan keselamatan Spring Boot, kami menggunakan kebergantungan spring-boot-starter-security dan mesti menambah

konfigurasi keselamatan. Ia memerlukan kod yang sangat sedikit. Kelas konfigurasi perlu melanjutkan WebSecurityConfigurerAdapter dan mengatasi kaedahnya.

31 Bandingkan kelebihan dan kekurangan Spring Security dan Shiro?

Memandangkan Spring Boot secara rasminya menyediakan sejumlah besar starter yang sangat mudah di luar kotak, termasuk Spring Security

Starter membuat lebih mudah untuk menggunakan Spring Security dalam Spring Boot Anda hanya perlu menambah kebergantungan untuk melindungi semua antara muka Oleh itu, jika ia adalah projek Spring Boot, Spring Security biasanya dipilih. Sudah tentu, ini hanyalah

gabungan yang dicadangkan Dari sudut teknikal semata-mata, tidak kira bagaimana anda menggabungkannya, tidak akan ada masalah. Berbanding dengan Spring Security
, Shiro terutamanya mempunyai ciri-ciri berikut:
Spring Security ialah rangka kerja pengurusan keselamatan kelas berat Shiro ialah rangka kerja pengurusan keselamatan yang ringan
Spring Security mempunyai konsep dan konfigurasi Rumit; dan konfigurasi mudah
Spring Security mempunyai fungsi yang berkuasa; Shiro mempunyai fungsi yang ringkas

32 Bagaimana untuk menyelesaikan masalah merentas domain dalam Spring Boot?

Cross-domain boleh dilakukan melalui JSONP. Penyelesaian hujung hadapan, tetapi JSONP hanya boleh menghantar permintaan GET dan tidak boleh menghantar permintaan jenis lain Dalam aplikasi gaya RESTful, ia sangat tidak berguna, oleh itu, kami mengesyorkan menggunakan (CORS, perkongsian sumber Crossorigin) pada bahagian belakang menyelesaikan masalah domain silang asal. Penyelesaian ini bukan unik untuk Spring Boot Dalam rangka kerja

SSM tradisional, masalah merentas domain boleh diselesaikan melalui CORS Walau bagaimanapun, sebelum kami mengkonfigurasi CORS dalam fail XML,

kini kami boleh melaksanakan WebMvcConfigurer Antara muka kemudiannya. kaedah addCorsMappings untuk menyelesaikan isu merentas domain.

@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
		.allowedOrigins("*")
		.allowCredentials(true)
		.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
		.maxAge(3600);
	}
}

33 Apakah monitor dalam Spring Boot?

Penggerak but musim bunga ialah salah satu fungsi penting dalam rangka kerja permulaan musim bunga. Pemantau but spring membantu anda mengakses keadaan semasa aplikasi anda yang sedang berjalan dalam persekitaran pengeluaran anda. Terdapat beberapa metrik yang mesti disemak dan dipantau dalam persekitaran pengeluaran. Malah

sesetengah aplikasi luaran mungkin menggunakan perkhidmatan ini untuk mencetuskan mesej amaran kepada orang yang berkaitan. Modul monitor mendedahkan satu set titik akhir REST yang boleh diakses terus

sebagai URL HTTP untuk menyemak status.

34. Bagaimana cara menggunakan Spring Boot untuk melaksanakan pengendalian pengecualian global?

Spring menyediakan cara yang sangat berguna untuk mengendalikan pengecualian menggunakan ControllerAdvice. Kami mengendalikan semua pengecualian yang dilemparkan oleh kelas pengawal dengan melaksanakan kelas
ControlerAdvice.

35. Bagaimanakah kita memantau semua perkhidmatan mikro Spring Boot?

Spring Boot menyediakan titik akhir monitor untuk memantau metrik bagi perkhidmatan mikro individu. Titik akhir ini berguna untuk mendapatkan maklumat
tentang aplikasi (seperti sama ada ia dimulakan) dan sama ada komponennya (seperti pangkalan data, dll.) berjalan dengan betul. Walau bagaimanapun, satu kelemahan atau kesukaran utama menggunakan monitor

ialah kita perlu membuka titik pengetahuan aplikasi secara individu untuk mengetahui status atau kesihatannya. Bayangkan

perkhidmatan mikro yang melibatkan 50 aplikasi, pentadbir perlu menekan terminal pelaksanaan kesemua 50 aplikasi. Untuk membantu

kami menangani situasi ini, kami akan menggunakan projek sumber terbuka yang terletak di . Ia dibina di atas Spring Boot Actuator, yang menyediakan

UI web yang membolehkan kami memvisualisasikan metrik untuk berbilang aplikasi.

36. SpringBoot性能如何优化

如果项目比较大,类比较多,不使用@SpringBootApplication,采用@Compoment指定扫包范

在项目启动时设置JVM初始内存和最大内存相同
将springboot内置服务器由tomcat设置为undertow

37. 如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?Spring Boot项目如何热部署?

这可以使用 DEV 工具来实现。通过这种依赖关系,您可以节省任何更改,嵌入式tomcat 将重新启
动。Spring Boot 有一个开发工具(DevTools)模块,它有助于提高开发人员的生产力。Java 开
发人员面临的一个主要挑战是将文件更改自动部署到服务器并自动重启服务器。开发人员可以重新
加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring
Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。DevTools 模块完全满
足开发人员的需求。该模块将在生产环境中被禁用。它还提供 H2 数据库控制台以更好地测试应用
程序。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

38. SpringBoot微服务中如何实现 session 共享 ?

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务
器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享
session ,常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的
session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上
的 session 。这样就实现了 session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使
得 session 的同步操作对开发人员而言是透明的,非常简便。

39. 您使用了哪些 starter maven 依赖项?

使用了下面的一些依赖项
spring-boot-starter-web 嵌入tomcat和web开发需要servlet与jsp支持
spring-boot-starter-data-jpa 数据库支持
spring-boot-starter-data-redis redis数据库支持
spring-boot-starter-data-solr solr支持
mybatis-spring-boot-starter 第三方的mybatis集成starter
自定义的starter(如果自己开发过就可以说出来)

40. Spring Boot 中的 starter 到底是什么 ?

首先,这个 Starter 并非什么新的技术点,基本上还是基于 Spring 已有功能来实现的。首先它提
供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来
决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配
置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性(spring.factories)注入
将这些配置属性注入进来,新注入的属性会代替掉默认属性。正因为如此,很多第三方框架,我们
只需要引入依赖就可以直接使用了。当然,开发者也可以自定义 Starter

41. Spring Boot 中如何实现定时任务 ?

在 Spring Boot 中使用定时任务主要有两种不同的方式,一个就是使用 Spring 中的 @Scheduled
注解,另一-个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。

42. spring-boot-starter-parent 有什么用 ?

我们都知道,新创建一个 Spring Boot 项目,默认都是有 parent 的,这个 parent 就是 springboot-starter-parent ,spring-boot-starter-parent 主要有如下作用:
定义了 Java 编译版本为 1.8 。
使用 UTF-8 格式编码。
继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依
赖,所以我们在写依赖时才不需要写版本号。
执行打包操作的配置。
自动化的资源过滤。
自动化的插件配置。
针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同
环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
总结就是打包用的

43. SpringBoot如何实现打包

进入项目目录在控制台输入mvn clean package,clean是清空已存在的项目包,package进行打
包或者点击左边选项栏中的Mavne,先点击clean在点击package

44. Apakah perbezaan antara balang yang dibungkus oleh Spring Boot dan balang biasa?

Balang terakhir yang dibungkus oleh projek Spring Boot ialah balang boleh laku ini boleh dilalui secara langsung -jar xxx.jar Jalankan perintah
Balang jenis ini tidak boleh dipercayai oleh projek lain sebagai balang biasa Walaupun ia bergantung, kelas di dalamnya tidak boleh digunakan.
Balang Spring Boot tidak boleh dipercayai oleh projek lain, terutamanya kerana strukturnya berbeza daripada balang biasa. Untuk pakej balang biasa, selepas penyahmampatan
ialah nama pakej secara langsung, dan pakej ialah kod kami Selepas penyahmampatan, balang boleh laku yang dibungkus oleh Spring Boot ialah kod kami dalam direktori BOOTINFclasses, jadi ia tidak boleh dirujuk secara langsung. Jika anda mesti merujuknya, anda boleh menambah konfigurasi pada fail pom.xml dan membungkus projek Spring Boot ke dalam dua balang, satu boleh laku dan satu boleh dirujuk.

Atas ialah kandungan terperinci Apakah soalan dan jawapan temu bual untuk SpringBoot?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam