优秀是一种习惯!!!

分库分表 有更新!

2023-11-29

分库分表 一、为什么要分库分表? 分库分表方案更多的是对关系型数据库数据存储和访问机制的一种补充,而不是颠覆。 二、分库分表的手段有那些? 三、JDBC和proxy方案优缺点是什么? 四、什么是垂直拆分和水平拆分? 垂直分表:eg:把userid和password拆分出来,单纯做登录。 优点: 1、差分后业务清晰(专库专用按业务拆分) 2、数据维护简单、按业务不同业务放到不同机器上 缺点: 1、如果单表的数据量大,写读压力大 2、受某种业务来决定、或者被限制。也就是说一个业务往往会影响到数据库的瓶颈(性能问题)。 3、部分业务无法关联join、只能通过Java程序接口去调用,提高了开发复杂度。(商品、订单信息、会员信息) 水平分表: 优点: 1、单(库)表的数据保持在一定的量(减少),有助于性能的提高 2、提高了系统的稳定性和负载能力 3、拆分的表的结构相同、程序改造较少 缺点: 1、数据的扩容很有难度维护量大 解释:如果再进行第一次分库(2个),可以按13579、02468进行差分,那么再要进行第二次分库呢?(3个)可以1357、0246、89,那么再进行第三四次扩容呢?或者不是....

Linux问题汇总 有更新!

2023-11-29

Linux问题汇总 一、linux查看3000端口是否被占用 要查看 Linux 系统上的端口占用情况,可以使用以下命令来检查 3000 端口是否被占用: sudo lsof -i :3000 这条命令会列出所有正在使用 3000 端口的进程和应用程序。如果有进程在使用该端口,将会输出相关信息;如果端口没有被占用,则不会有任何输出。 另外,你也可以使用 netstat 命令来查询端口占用情况。以下是使用 netstat 命令检查 3000 端口的示例: sudo netstat -tuln | grep 3000 该命令会显示所有监听状态的端口,并使用管道过滤出其中的 3000 端口。如果该端口被占用,输出结果中会有相关的信息;如果没有被占用,则没有输出结果。 请确保以超级用户或具有适当权限的用户身份运行以上命令,这样才能获得正确的结果。 二、linux查看使用9000端口的资源路径 要查看 Linux 上使用 9000 端口的资源路径,可以使用以下命令: sudo lsof -i :9000 该命令将列出所有正在使用 9000 端口的进程及其相关信息。在输出中,你可以查找 CO....

Bat常用脚本文件合集 有更新!

2023-11-29

Bat常用脚本文件合集 一、netstat -ano | findstr <端口号> taskkill /F /PID <进程ID> 使用上述两条命令在windows 10系统上强制关闭65425、65450、65401、65400、65500、65430这些端口 可以使用以下的bat文件脚本内容来强制关闭指定端口的进程: @echo off set ports=65425 65450 65401 65400 65500 65430 for %%p in (%ports%) do ( echo Killing processes on port %%p... for /f "tokens=5" %%a in ('netstat -ano ^| findstr "%%p"') do ( echo Taskkill /F /PID %%a taskkill /F /PID %%a ) ) echo All specified processes have been terminated. 将以上内容保存为一个扩展名为.bat的文件,然后在Windows 10系统上....

架构设计问题 有更新!

2023-11-29

架构设计问题 一、EJB模型和COM+模型 EJB(Enterprise JavaBeans)模型和COM+(Component Object Model Plus)模型是两种不同的分布式组件技术,用于开发企业级应用程序。它们在不同的平台上有不同的实现方式和特点。 EJB模型: EJB是一种基于Java语言的分布式对象模型,用于构建企业级应用程序。 EJB提供了一种将应用程序逻辑封装为可复用组件的方式,这些组件可以在分布式环境中部署和执行。 EJB通过定义接口和实现类的方式来描述组件,提供了事务管理、安全性、并发控制等功能。 EJB组件可以部署在EJB容器中,由容器负责提供生命周期管理、事务管理、线程管理等服务。 EJB模型主要用于Java EE(Enterprise Edition)平台,支持跨平台和跨语言的互操作性。 COM+模型: COM+是一种面向对象的分布式组件技术,最初由微软提出,用于构建Windows平台上的应用程序。 COM+扩展了COM(Component Object Model)模型,提供了更多的功能和服务,例如事务处理、安全性、对象池等。 COM+组件可以用多种....

算法问题汇总 有更新!

2023-11-29

算法问题汇总 一、当两个不同的数经过哈希函数计算后得到了同一个结果,即他们会被映射到哈希表的同一个位置时,即称为发生了哈希冲突。那么两个相同的数计算后结果应该如何呢 在使用哈希函数时,如果两个不同的数经过计算后得到了相同的哈希值,我们称之为哈希冲突。哈希冲突是一种常见现象,因为哈希函数通常是将一个任意长度的输入映射到固定长度的输出,很难避免。 而无论是两个不同的数还是两个相同的数,当它们经过哈希函数计算后得到的结果相同时,都会被映射到哈希表的同一个位置上,即存储在同一个桶中。这也是哈希函数在处理数据时可靠性的一个重要保证:相同的输入总是会得到相同的输出。 在哈希表中,发生哈希冲突时,通常会采用开放地址法或链式法来解决。其中,开放地址法是指继续寻找哈希表中未被占用的位置来存储冲突的元素,而链式法则是在哈希表每个位置上维护一个链表,将哈希值相同的元素存储在同一个链表中。 总之,哈希冲突是一种常见的现象,但是通过合适的解决方案,我们可以在哈希表中高效地存储和查找数据。 二、使用bitmap实现千万数据去重 使用位图(Bitmap)数据结构可以高效地进行千万级别的数据去重操作。下面是详细的思路....

Vue使用问题 有更新!

2023-11-29

Vue使用问题 一、前端Vue,后端Java,前后端分离情况下,后端如何控制跳转到指定前端页面 在前后端分离的情况下,后端并不负责前端页面的展示,而是提供API接口来供前端调用。所以后端不会控制跳转到指定前端页面。 一种常见的解决方案是前端使用Vue Router这样的路由工具进行页面跳转,并监听路由变化发起相应的API请求,后端则根据请求参数进行相应的处理并返回数据。前端再根据数据进行页面渲染。 如果需要在后端直接控制跳转到指定前端页面,可以考虑在后端渲染HTML模板并将相关路由信息传递给前端,让前端根据这些信息进行相应的页面跳转。但是这样的实现方式并不推荐,违背了前后端分离的原则。 二、前端如何自己快速模拟数据或是否有工具 前端开发过程中,我们通常需要模拟数据来进行页面的展示和功能的测试,以及在后端接口还未完全开发完成的情况下可以先进行前端的开发。以下是一些前端模拟数据的方法和工具: 1.手动模拟数据:手动写一些 JSON 格式的数据,比较适用于数量较小的数据模拟。如: { "name": "张三", "age": 18, "gender": "male" } 2.Mock.js....

权限问题.汇总 有更新!

2023-11-29

权限问题 一、有哪些java框架可以实现对实体类中通过注解实现不同用户角色对字段的增删查改精细化控制 在Java开发中,有几个常见的框架可以实现对实体类中通过注解实现不同用户角色对字段的增删查改精细化控制。以下是其中一些常用的框架: Spring Security:Spring Security是一个功能强大的安全框架,可以用于认证和授权。它提供了一套丰富的注解和配置选项,可以实现对不同角色或权限的精细化访问控制。 Apache Shiro:Apache Shiro是另一个流行的Java安全框架,提供了易于使用的身份验证、授权、加密和会话管理等功能。Shiro允许通过注解或编程方式进行细粒度的授权控制。 Spring Data JPA:Spring Data JPA是Spring框架的一个子项目,可以简化与数据库的交互。通过使用Spring Data JPA的@Query注解,你可以编写自定义查询方法,并且可以根据用户的角色或权限对查询结果进行过滤。 Hibernate Envers:Hibernate Envers是一个用于审计和版本控制的框架。它可以记录实体类的历史变更,并且支持根....

内网穿透问题汇总 有更新!

2023-11-29

内网穿透问题汇总 一、使用nginx反向代理可以实现内网穿透吗 使用nginx反向代理可以实现内网穿透,因为nginx的反向代理功能可以将客户端的请求转发到内网的某个服务上,并将响应返回给客户端,从而使得外部用户可以通过Internet访问内网中的服务。这种方式通常被用于企业内部网站、应用程序、数据库等资源的外部访问,也可以用于个人电脑中搭建的服务器的外部访问。但是需要注意,要确保nginx和内网服务两者之间的通信是安全的,以免遭受网络攻击和数据泄露。 如何使用nginx反向代理实现内网穿透?如果内网IP是192.168.0.99,如何外网访问? 要使用nginx反向代理实现内网穿透,需要按照以下步骤操作: 在部署有nginx的服务器上配置反向代理。可以书写一个类似下面的nginx配置文件,将外部访问IP(比如202.101.100.99)与内部服务的IP和端口(比如192.168.0.99:8080)映射起来。 server { listen 80; server_name yourdomain.com; location / { proxy_pass http://192.168.....

JDK问题汇总 有更新!

2023-11-29

JDK问题 一、jdk32编译后的代码和jdk64编译后的代码是否不同 在Java环境中,JDK 32位和JDK 64位是不同的软件包,分别提供了对应平台的编译器、工具和运行时库等。因此,使用JDK 32位编译的代码和使用JDK 64位编译的代码在二进制上是有区别的,不能通用。 具体而言,由于32位和64位平台的CPU架构不同,对于编译后的目标代码而言,它们所使用的指令集也会有所不同。这就意味着,使用32位编译器编译出来的代码不能直接在64位平台上运行,也不能够充分利用64位处理器所提供的特性和性能优势。同样地,使用64位编译器编译出来的代码也不能在32位平台上运行。 因此,如果需要在不同平台上运行Java程序,通常需要根据不同平台提供对应的JDK版本,并使用对应平台的编译器进行编译。同时,在跨平台应用开发中还可以采用一些工具或框架,如Apache Maven或Gradle等,使得在不同平台下进行编译和打包变得更加便捷。

Mybatis Plus使用问题汇总 有更新!

2023-11-29

Mybatis Plus使用问题 一、用mybatis plus查询,mysql查询String类型字段a在集合List b中的所有数据 使用 MyBatis Plus 进行 MySQL 查询,可以通过使用 in 关键字和 List 参数来实现查询字符串类型字段在给定集合中的所有数据。下面是一个示例代码: import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class YourService { @Autowired private YourMapper yourMapper; public List<YourEntity> queryDataInList(List<String> li....

工具类使用问题汇总 有更新!

2023-11-29

工具类使用问题 一、Optional.ofNullable如果值为空集合[],则Optional.ofNullable(value).isPresent()返回true 是的,如果将一个空集合 [] 作为参数传递给 Optional.ofNullable() 方法进行包装,则会返回一个包含空集合的 Optional 对象,而不是一个空的 Optional 对象。 这是由于在 Java 中,空集合 [] 并不等同于 null 值,而是一个长度为 0 的数组。因此,当将空集合 [] 传递给 Optional.ofNullable() 方法时,该方法会将其视为一个非空值,并返回一个包含该空集合的 Optional 对象。 下面是一个示例代码,展示了如何使用 Optional.ofNullable() 对空集合进行包装: java List<String> list = new ArrayList<>(); Optional<List<String>> optional1 = Optional.ofNullable(list); // 包装空集合....

Java8 Stream使用问题汇总 有更新!

2023-11-29

Java8 Stream使用问题 一、stream中map与foreach的区别示例 map() 方法:将一个 Stream 中的元素映射成另一个 Stream 中的元素。常用于进行数据转换或提取某些信息。例如,将一个字符串列表中的每个字符串转换为大写形式: List<String> list = Arrays.asList("hello", "world"); List<String> upperList = list.stream().map(String::toUpperCase).collect(Collectors.toList()); forEach() 方法:遍历 Stream 中的所有元素并对其进行某些操作。不会改变元素的值,也不会产生新的 Stream。例如,打印一个整型列表中的所有元素: List<Integer> list = Arrays.asList(1, 2, 3); list.stream().forEach(System.out::println); 需要注意的是,在使用 forEach() 方法时,如果需要对元....

分布式时间问题集合 有更新!

2023-11-29

分布式时间问题集合 一、 @SpringBootApplication public class SwappingApplication { public static void main(String[] args) { SpringApplication.run(SwappingApplication.class, args); } @PostConstruct void started() { TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); } } 这段代码是一个基于 Spring Boot 框架的应用程序入口类。让我来解释一下: @SpringBootApplication:这是一个注解,标记了该类是一个 Spring Boot 应用程序的入口类。它将自动进行一些配置,包括自动扫描和加载其他组件、配置以及设置默认属性。 public static void main(String[] args):这是一个 Java 程序的入口方法。在该方法中,通过调用 SpringApplication.run() 来启动 Spring....

Spring Security使用问题汇总 有更新!

2023-11-29

Spring Security使用问题汇总 一、org.springframework.security.web.authentication.wwwprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)该方法什么时候执行? doFilterInternal方法是Spring Security框架中的一个重要方法,用于处理身份验证和授权过程。它在HTTP请求被处理之前调用,用于执行安全过滤器链中的逻辑。 具体来说,当一个请求到达应用程序的时候,Servlet容器会调用配置了Spring Security的过滤器链。这个过滤器链中包含了多个过滤器,用于实现不同的安全功能,比如认证、授权、会话管理等。 当请求通过这些过滤器链时,每个过滤器都会按照顺序调用其doFilter方法。而doFilterInternal方法是在核心的认证过滤器(通常是UsernamePasswordAuthenticationFilter)中定义的,用于处....

websocket使用问题汇总 有更新!

2023-11-29

websocket使用问题 一、websocket推送功能中只使用session.isOpen()来判断连接是否建立成功可以推送是否可行? WebSocket 推送功能中使用 session.isOpen() 判断连接是否建立成功是不够可靠的。虽然在大多数情况下,isOpen() 方法可以用来检查 WebSocket 连接是否打开,但它并不能保证连接的稳定性和可靠性。 在 WebSocket 建立连接期间,服务器和客户端需要完成一些握手过程,验证双方的身份,协调双方的协议选项等操作。只有在握手成功之后,才能确定 WebSocket 连接已经建立成功。因此,在发送消息前应该确保连接已经完全建立。 如果仅使用 session.isOpen() 来判断连接是否建立成功,可能会忽略掉一些异常情况,例如: 客户端在握手期间关闭了连接。 服务器在握手期间出现异常,导致连接未正常建立。 网络故障或其他原因导致 WebSocket 连接断开。 为了确保 WebSocket 推送的可靠性,我们应该尽可能多地掌握连接状态的信息,并及时处理异常情况。可以考虑使用心跳机制、定时重连、异常监控等方式来提高连接的....

Nginx使用问题 有更新!

2023-11-29

Nginx使用问题 一、nginx location @router 在Nginx中,@router是一个特殊的位置(location)。它通常在使用Nginx作为反向代理服务器时使用。@router位置定义了一个命名的位置块,用于处理不匹配其他location的请求。 一般情况下,Nginx的配置文件中会有一些具体的location规则,用来匹配特定的URL,并定义如何处理这些请求。但是如果没有任何location匹配请求的URL,或者没有指定特定的location规则,那么Nginx将会使用默认的规则来处理这些请求。而@router位置就是用来处理这种情况的。 在@router位置块中,你可以编写自定义的逻辑来处理未匹配的请求。通常情况下,@router位置会将请求转发给后端应用服务器处理,或者返回一个自定义的错误页面。 以下是一个使用@router的示例配置: location / { try_files $uri $uri/ @router; # 此处是其他location规则 ... } location @router { # 自定义逻辑处理未匹配的请求 proxy_pas....