项目经验问题

跨域问题是什么?你如何解决跨域?

跨域问题是浏览器限制的,但决定权在与后端的网络协议中。

只有在客户端与服务器同源的情况下浏览器才会发送请求。但如果后端允许跨域,则浏览器也可以发送请求,这期间浏览器会去检查目标服务器是否允许跨域请求。

如果后端允许跨域,则浏览器就可以发送请求。如果后端不允许跨域,则可以使用代理去伪造同源请求。

跨域问题确实是由浏览器的同源策略引起的。浏览器的同源策略是为了防止某个源(协议,域名,端口都相同)的脚本(例如JavaScript)访问另一个源的文档或脚本时产生的恶意行为。它是一种安全机制,防止用户数据被恶意网站利用。

当一个网页上的JavaScript脚本尝试向不同的源发送请求时,浏览器会检查目标服务器是否允许跨域请求。这就需要服务器端进行配置,告诉浏览器是否允许这样的请求。这种配置通常在服务器的响应头中进行,称为CORS(跨域资源共享)策略。

如果服务器没有配置CORS,或者配置的CORS策略不允许来自特定源的请求,那么浏览器将会阻止该请求。即使服务器处理了请求并返回了结果,浏览器也会因为同源策略而不显示或处理返回的数据。

因此,即使跨域是浏览器的限制,后端服务器也需要适当地配置CORS,以允许特定的跨域请求。这样,前端的JavaScript代码才能成功地发送请求并处理返回的数据。

你在Java开发中最常使用的框架是什么?可以分享一些你在项目中使用该框架的经验吗?

Spring Boot、Vue、redis、MySQL、Mybatis。ES。Knife4j

JWT、看了下若依框架。

Spring Boot其目标是简化Spring应用程序的创建和开发过程。Spring Boot尽可能地进行自动配置,使开发人员能够更快地开始编写业务逻辑代码。

若依框架更像是快速开发平台,上面提供了很多的常见需求。其目标是简化Spring应用程序的创建和开发过程。Spring Boot尽可能地进行自动配置,使开发人员能够更快地开始编写业务逻辑代码。

ElasticStack:包含(Elasticsearch),数据的整合 => 提取 => 存储 => 使用,一整套!

beats:从各种不同类型的文件 / 应用来 采集数据  a,b,c,d,e,aa,bb,cc

Logstash:从多个采集器或数据源抽取 / 转换数据,向 es 输送 aa,bb,cc

elasticsearch:存储、查询数据

kibana:可视化 es 的数据

你在Java应用开发中遇到的最大挑战是什么?你是如何解决的?

虽然不是和Java相关的。以前用Python写过一个小工具,去爬日本向日葵卫星的公开地球卫星图片。我的需求是每隔一段时间去爬取这个图片并设置为电脑的桌面。这样我就可以每次显示桌面的时候看到地球的变化。

这期间我遇到了很多问题。每个问题都困扰了我很久。

1、我遇到的第一个问题就是爬图片。他们卫星图片有一个网站,我用模拟请求的方式去获取图片。我发现我用请求获取不到,因为需要携带token。后来我用模拟请求的方式去获取token,之后再用token携带图片请求去获取请求。期间遇到了put请求和post请求携带token去访问卫星的问题。

2、第二个我想获取高清图片。我们现在好一点的图片时4k,但他们的图片时上万像素的。是11000多。当时如果下载是非常慢的,一方面因为图片很大,另一方面服务器很慢,而且无法断点续传。我就想,那么他们是怎么在浏览器上展示10000多像素的卫星图片的。后来发现,他们是用小的图片去组装成一张大的图片。那思路就有了,把这些分割的图片全部爬下来,再组成一张完整的图片就好了。

3、下载速度,我一开始用的是一张图片建立一个连接。后面改成了用一个连接去下载多个图片。后面又改成了用多个连接去下载多个图片。

4、合成想要的图片,并做一定的裁剪,让图片符合我想要的尺寸。

5、将图片设置成桌面,这设计到window的服务了。自己搞比较困难,但借助第三方库也可以实现。我记得这部分代码不多。

6、设置弹窗、但后面已经和网络和java没有关系了。

7、后面还想做命令行的处理。 不过交互效果属实不太理想。

在你的项目中,你是如何处理数据库操作的?你熟悉哪些持久化框架或工具?

MyBatis允许开发者有更直接的控制权,在SQL语句的编写上提供更多的灵活性,而且它对于大型和复杂的查询操作也表现得非常优秀。

你在Java应用开发中遇到过性能瓶颈吗?你是如何识别和解决这些问题的?

性能瓶颈可能会出现在数据库访问、算法效率、内存使用和垃圾回收、并发处理等方面。

我还没遇到过实际的瓶颈问题。

但如果要排查瓶颈问题可能可以从下面一些方法入手:

  1. 数据库访问:我会查看是否存在没有索引的查询,是否有可以优化的复杂查询,或者是否可以使用批处理操作来减少数据库交互次数。同时,对于大数据量的操作,我会考虑使用数据库的分页查询,避免一次性加载过多的数据。
  2. 算法效率:我会重新审查代码以找出可以优化的地方。例如,是否可以使用更有效率的数据结构,或者是否有逻辑上的冗余。在复杂的算法中,我会尝试使用更高效的算法,或者使用并行处理来提升性能。
  3. 内存使用和垃圾回收:如果发现频繁的全量垃圾回收(Full GC),我会检查代码是否有过多的短期对象产生,或者是否存在内存泄漏。对于大内存的应用,我会调整Java堆的大小和垃圾收集器的设置来优化性能。
  4. 并发处理:如果发现并发瓶颈,我会查看是否存在锁竞争,或者是否可以使用更好的并发控制策略,如使用Java并发库中的工具,或者使用异步处理方式。

遇到了什么前端问题。

在前端的搜索上会遇到,如果你搜索的词条是不存在的,那么客户端唯一的结果就是不存在。这个通常称为“FE disaster”也就是“前端灾难”,这个是不被允许的。比如有个词条是首字母大写,但你搜索的时候没有大写就会什么也搜索不到,这样的前端体验是非常糟糕的。

解决办法可以使用模糊搜索,假如搜索一个“软件开发”就可以得到“前端开发人员”这样的结果。这是前端可以解决的办法。