当前位置: 首页 > news >正文

自己动手开发了一个 SpringMVC 框架,用起来太香了

自己动手开发了一个 SpringMVC 框架,用起来太香了

一、介绍

在日常的 web 开发中,熟悉 java 的同学一定知道,Spring MVC 可以说是目前最流行的框架,之所以如此的流行,原因很简单:编程简洁、上手简单

我记得刚开始入行的时候,最先接触到的是Struts1 + Hibernate + Spring来web系统的整体开发框架,简单的描述一下当时的编程心情:超难用,各种配置项很多,而且不容易快速入手!

之后,新的项目换成了Struts2 + hibernate + spring来作为主体开发框架,Struts2相比Struts1编程要简单很多,而且加强了对拦截器与IoC的支持,而在Struts1中,这些特性是很难做的的!

然而随着Struts2的使用量越来越广,业界爆出关于Struts2的bug和安全漏洞却越来越多!

自己动手开发了一个 SpringMVC 框架,用起来太香了

黑客们可以轻易的利用安全漏洞直接绕开安全防线,获取用的隐私数据,网名因个人信息泄露造成的经济损失高达 915 亿元!

自己动手开发了一个 SpringMVC 框架,用起来太香了

至此很多开发者开始转到SpringMVC框架阵营!

今天我们要介绍的主角就是SpringMVC框架,刚开始玩这个的时候,给我最直接的感觉就是:很容易简单

直接通过几个注解就可以完成方法的暴露,比起Struts2中繁琐的xml配置,SpringMVC的使用可以说更加友好!

熟悉SpringMVC框架的同学一定清楚下面这张图,

自己动手开发了一个 SpringMVC 框架,用起来太香了

这张图就是 SpringMVC 在处理 http 请求的整个流程中所做的一些事情。

  • 1、用户发送请求至前端控制器DispatcherServlet
  • 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  • 3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  • 4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
  • 5、执行处理器(Controller,也叫后端控制器)。
  • 6、Controller执行完成返回ModelAndView
  • 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  • 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  • 9、ViewReslover解析后返回具体View
  • 10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。
  • 11、DispatcherServlet响应用户。

DispatcherServlet 主要承担接收请求、响应结果、转发等作用,剩下的就交给容器来处理!

基于上面的流程,我们可以编写出一款简化版的Spring MVC框架,话不多说,直接撸起来!

二、程序实践

首先上图!

自己动手开发了一个 SpringMVC 框架,用起来太香了

这个就是我们简易版的Spring MVC框架的实现流程图!

  • 1、首先创建一个DispatcherServlet类,在服务启动的时候,读取要扫描的包路径,然后通过反射将类信息存储到ioc容器,同时通过@Autowired注解,实现自动依赖注入,最后读取@RequestMapping注解中的方法,将映射路径与类的关系存储到映射容器中。
  • 2、当用户发起请求的时候,通过请求路径到映射容器中找到对应的执行类,然后调用具体的方法,发起逻辑处理,最后将处理结果返回给前端用户!

以下是具体实践过程!

2.1、创建扫描注解

因为Spring MVC基本全部都是基于注解开发,因此我们事先也需要创建对应的注解,各个含义与Spring MVC一致!

  • 控制层注解
/*** 控制层注解* @Controller */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Controller {

    String value() default “”;
}

  • 请求路径注解
/**
 请求路径注解
 @RequestMapping
*/

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestMapping {

    String value() default “”;
}

  • 参数注解
/**
 参数注解
 @RequestParam
*/

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {

    String value() default “”;
}

  • 服务层注解
/**
 服务层注解
 @Controller
*/

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Service {

    String value() default “”;
}

  • 自动装载注解
/**
 自动装载注解
 @Autowrited
*/

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

    String value() default “”;
}

2.2、编写 DispatcherServlet 类

DispatcherServlet是一个Servlet类,主要承担的任务是:接受前端用户的请求,然后进行转发,最后响应结果给前端用户!

详细代码如下:

/**
 servlet跳转层
/

@WebServlet(name = “DispatcherServlet”,urlPatterns = “/*”, loadOnStartup = 1, initParams = {@WebInitParam(name=“scanPackage”, value=“com.example.mvc”)})
public class DispatcherServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private static final Logger logger = LoggerFactory.getLogger(DispatcherServlet.class);

    /*请求方法映射容器/
    private static List<RequestHandler> handlerMapping = new ArrayList<>();

    /**
      服务启动的时候,进行初始化,流程如下:
     
 1、扫描指定包下所有的类
      2、通过反射将类实例,放入ioc容器
     
 3、通过Autowired注解,实现自动依赖注入,也就是set类中的属性
      4、通过RequestMapping注解,获取需要映射的所有方法,然后将类信息存放到容器中
     
 @param config
      @throws ServletException
     
/

    @Override
    public void init(ServletConfig config) throws ServletException {
        try {
            //1、扫描指定包下所有的类
            String scanPackage = config.getInitParameter(“scanPackage”);
            //1、扫描指定包下所有的类
            List<String> classNames = doScan(scanPackage);
            //2、初始化所有类实例,放入ioc容器,也就是map对象中
            Map<String, Object> iocMap = doInstance(classNames);
            //3、实现自动依赖注入
            doAutowired(iocMap);
            //5、初始化方法mapping
            initHandleMapping(iocMap);
        } catch (Exception e) {
            logger.error(“dispatcher-servlet类初始化失败!”,e);
            throw new ServletException(e.getMessage());
        }
    }

    /**
      @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     
/

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        doPost(request, response);
    }

    /**
      @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     
/

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //跳转
        doDispatch(request, response);
    }

    /**
      扫描指定包下的类文件
     
 @param packageName
      @return
     
/

    private List<String> doScan(String packageName){
        if(StringUtils.isBlank(packageName)){
            throw new RuntimeException(“mvc配置文件中指定扫描包名为空!”);
        }
        return PackageHelper.getClassName(packageName);
    }

    private Map<String, Object> doInstance(List<String> classNames) {
        Map<String, Object> iocMap = new HashMap<>();
        if(!CollectionUtils.isNotEmpty(classNames)){
            throw new RuntimeException(“获取的类为空!”);
        }
        for (String className : classNames) {
            try {
                //通过反射机制构造对象
                Class<?> clazz = Class.forName(className);
                if(clazz.isAnnotationPresent(Controller.class)){
                    //将类名第一个字母小写
                    String baneName = firstLowerCase(clazz.getSimpleName());
                    iocMap.put(baneName, clazz.newInstance());
                }else if(clazz.isAnnotationPresent(Service.class)){
                    //服务层注解判断
                    Service service = clazz.getAnnotation(Service.class);
                    String beanName = service.value();
                    //如果该注解上没有自定义类名,则默认首字母小写
                    if(StringUtils.isBlank(beanName)){
                        beanName = clazz.getName();
                    }
                    Object instance = clazz.newInstance();
                    iocMap.put(beanName, instance);
                    //如果注入的是接口,可以巧妙的用接口的类型作为key
                    Class<?>[] interfaces = clazz.getInterfaces();
                    for (Class<?> clazzInterface : interfaces) {
                        iocMap.put(clazzInterface.getName(), instance);
                    }
                }
            } catch (Exception e) {
                logger.error(“初始化mvc-ioc容器失败!”,e);
                throw new RuntimeException(“初始化mvc-ioc容器失败!”);
            }
        }
        return iocMap;
    }

    /**
      实现自动依赖注入
     
 @throws Exception
     */

    private void doAutowired(Map<String, Object> iocMap) {
        if(!MapUtils.isNotEmpty(iocMap)){
            throw new RuntimeException(“初始化实现自动依赖失败,ioc为空!”);
        }
        for(Map.Entry<String, Object> entry : iocMap.entrySet()){
            //获取对象下所有的属性
            Field[] fields = entry.getValue().getClass().getDeclaredFields();
            for (Field field : fields) {
                //判断字段上有没有@Autowried注解,有的话才注入
                if(field.isAnnotationPresent(Autowired.class)){
                    try {
                        Autowired autowired = field.getAnnotation(Autowired.class);
                        //获取注解上有没有自定义值
                        String beanName = autowired.value().trim();
                        if(StringUtils.isBlank(beanName)){
                            beanName = field.getType().getName();
                        }
                        //如果想要访问到私有的属性,我们要强制授权
                        field.setAccessible(true);
                        field.set(entry.getValue(), iocMap.get(beanName));
                    } catch (Exception e) {
                        logger.error(“初始化实现自动依赖注入失败!”,e);
                        throw new RuntimeException(“初始化实现自动依赖注入失败”);
                    }
                }
            }
        }
    }

    /**
      初始化方法mapping
     
/

    private void initHandleMapping(Map<String, Object> iocMap){
        if(!MapUtils.isNotEmpty(iocMap)){
            throw new RuntimeException(“初始化实现自动依赖失败,ioc为空”);
        }
        for(Map.Entry<String, Object> entry:iocMap.entrySet()){
            Class<?> clazz = entry.getValue().getClass();
            //判断是否是controller层
            if(!clazz.isAnnotationPresent(Controller.class)){
                continue;
            }
            String baseUrl = null;
            //判断类有没有requestMapping注解
            if(clazz.isAnnotationPresent(RequestMapping.class)){
                RequestMapping requestMapping = clazz.getAnnotation(RequestMapping.class);
                baseUrl= requestMapping.value();
            }
            Method[] methods = clazz.getMethods();
            for (Method method : methods) {
                //判断方法上有没有requestMapping
                if(!method.isAnnotationPresent(RequestMapping.class)){
                    continue;
                }
                RequestMapping requestMethodMapping = method.getAnnotation(RequestMapping.class);
                //"/+",表示将多个"/“转换成”/"
                String regex = (baseUrl + requestMethodMapping.value()).replaceAll("/+"“/”);
                Pattern pattern = Pattern.compile(regex);
                handlerMapping.add(new RequestHandler(pattern, entry.getValue(), method));
            }
        }
    }

    /**
      servlet请求跳转
     
 @param request
      @param response
     
 @throws IOException
     */

    private void doDispatch(HttpServletRequest request, HttpServletResponse response) throws IOException {
        try {
            request.setCharacterEncoding(“UTF-8”);
            response.setHeader(“Cache-Control”“no-cache”);
            response.setHeader(“Pragma”“no-cache”);
            response.setDateHeader(“Expires”, -1);
            response.setContentType(“text/html”);
            response.setHeader(“content-type”“text/html;charset=UTF-8”);
            response.setCharacterEncoding(“UTF-8”);
            RequestHandler handle = getHandleMapping(request);
            if(Objects.isNull(handle)){
                //异常请求地址
                logger.warn(“异常请求地址!地址:” + request.getRequestURI());
                response.getWriter().append(“error request url”);
                return;
            }
            //获取参数列表
            Object[] paramValues = RequestParamHelper.buildRequestParam(handle, request, response);
            Object result = handle.getMethod().invoke(handle.getController(), paramValues);
            if(result != null){
                PrintWriter out = response.getWriter();
                out.println(result);
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            logger.error(“接口请求失败!”,e);
            PrintWriter out = response.getWriter();
            out.println(“请求异常,请稍后再试”);
            out.flush();
            out.close();
        }
    }

    /**
      将类名第一个字母小写
     
 @param clazzName
      @return
     
/

    private String firstLowerCase(String clazzName){
        char[] chars = clazzName.toCharArray();
        chars[0] += 32;
        return String.valueOf(chars);
    }

    /**
      获取用户请求方法名
     
 与handlerMapping中的路径名进行匹配
      @param request
     
 @return
     */

    private RequestHandler getHandleMapping(HttpServletRequest request){
        if(CollectionUtils.isNotEmpty(handlerMapping)){
            //获取用户请求路径
            String url = request.getRequestURI();
            String contextPath = request.getContextPath();
            String serviceUrl = url.replace(contextPath, “”).replaceAll("/+"“/”);
            for (RequestHandler handle : handlerMapping) {
                //正则匹配请求方法名
                Matcher matcher = handle.getPattern().matcher(serviceUrl);
                if(matcher.matches()){
                    return handle;
                }
            }
        }
        return null;
    }
}

这里要重点介绍一下初始化阶段所做的操作!

DispatcherServlet在服务启动阶段,会调用init方法进行服务初始化,此阶段所做的事情主要有以下内容:

  • 1、扫描指定包下所有的类信息,返回的结果主要是包名 + 类名
  • 2、通过反射机制,将类进行实例化,将类实例化对象存储到ioc容器中,其中key是类名(小些驼峰),value是类对象
  • 3、通过Autowired注解找到类对象中的属性,通过小驼峰从ioc容器中寻找对应的属性值,然后进行set操作
  • 4、通过Controller和RequestMapping注解寻找需要暴露的方法,并获取对应的映射路径,最后将映射路径
  • 5、最后,当前端用户发起一个请求时,DispatcherServlet获取到请求路径之后,通过与RequestMapping中的路径进行匹配,找到对应的controller类中的方法,然后通过invoke完成方法调用,将调用结果返回给前端!

2.3、编写 controller 类

当DispatcherServlet编写完成之后,紧接着我们需要编写对应的controller控制类来接受前端用户请求,下面我们以用户登录为例,程序示例如下:

  • 编写一个LoginController控制类,接受前端用户调用
@Controller
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private UserService userService;

    /**
      用户登录
     
 @param request
      @param response
     
 @param userName
      @param userPwd
     
 @return
     */

    @RequestMapping("/login")
    public String login(HttpServletRequest request, HttpServletResponse response,
                        @RequestParam(“userName”) String userName,
                        @RequestParam(“userPwd”) String userPwd){
        boolean result = userService.login(userName, userPwd);
        if(result){
            return “登录成功!”;
        } else {
            return “登录失败!”;
        }
    }
}

  • 编写一个UserService服务类,用于判断账户、密码是否正确
public interface UserService {

    /**
      登录
     
 @param userName
      @param userPwd
     
 @return
     */

    boolean login(String userName, String userPwd);
}

@Service
public class UserServiceImpl implements UserService {

    @Override
    public boolean login(String userName, String userPwd) {
        if(“zhangsan”.equals(userName) && “123456”.equals(userPwd)){
            return true;
        } else {
            return false;
        }
    }
}

最后,将项目打包成war,通过tomcat启动服务!

在浏览器中访问http://localhost:8080/user/login?userName=hello&userPwd=123,结果显示如下:

自己动手开发了一个 SpringMVC 框架,用起来太香了

当我们将userName和userPwd换成正确的数据,访问地址如下:http://localhost:8080/user/login?userName=zhangsan&userPwd=123456

自己动手开发了一个 SpringMVC 框架,用起来太香了

可以很清晰的看到,服务调用正常!

三、总结

本文主要以Spring MVC框架为背景,手写了一个简易版的Spring MVC框架,虽然功能简陋了一点,但是基本五脏俱全,里面讲解了ioc和自动依赖注入的实现过程,还有前端发起一个路径请求,是如何映射到对应的controller类中的方法上!

当然实际的Spring MVC框架的跳转流程比这个复杂很多很多,里面包括各种拦截器、权限安全管理等等,在后面的文章,小编也会陆续进行详细介绍!

码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!

如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-1188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

Redis

Redis一、Redis出现的背景1.1、什么是NoSQL1.1.1、NoSQL(泛指非关系型数据库)1.1.2、NoSQL的特点1.1.3、NoSQL的四大分类二、Redis概述三、Redis应用场景四、Linux环境下安装Redis五、Redis基础命令六、Redis五大数据类型6.1、String(字符串类型)6.2、List(列表)6.3、Set(集合)…...

理解“same-site“ 和 “same-origin“

Understanding "same-site" and "same-origin" 作者&#xff1a;Eiji Kitamura 译者&#xff1a;weixsun 原文&#xff1a;Understanding "same-site" and "same-origin" "same-site" and "same-origin" are …...

6年菜鸟开发面试字节跳动安卓研发岗,知乎上已获万赞

上周喜提oppo面试offer&#xff0c;本人在深圳&#xff0c;有4年多的Android项目经验&#xff0c;普通本科学历。 面试是相互相在&#xff0c;OPPO给我的印象确实如其核心价值观所说&#xff1a;本分。 一面、部长面和HR面都蛮顺利&#xff08;一千个人可能要了一百左右&…...

NameAID-文档批量更名

工作中总会遇到一大批文件需要改名的情况&#xff0c;各种各样的规则限制下&#xff0c;手动操作是一个费事费力的活 比如说统一在原来的文件名前面或后面加字符&#xff0c;更改文件名大小写&#xff0c;替换或删除某个词等&#xff0c;这些都是令人头疼的工作 交给NameAID轻…...

Unity基础之C#核心篇笔记4:多态

Unity基础之C#核心篇笔记4&#xff1a;多态多态1.多态的概念2.解决的问题3.多态的实现4.总结抽象类和抽象方法1.抽象类2.抽象函数3.总结4.练习题接口1.接口的概念2. 接口的申明3.接口的使用4.接口可以继承接口5.显示实现接口6.总结7.练习题密封方法1.密封方法基本概念2.实例3.总…...

用Python爬取彼岸图网图片

用Python爬取彼岸图网图片 *使用了 四个模块 import time import requests from lxml import etree import os 没有的话自行百度安装。 #encoding utf-8 import time import requests from lxml import etree import os# http://www.netbian.com/ 爬虫 if __name__ __mai…...

yolov5 detect.py报错

新手求助 yolov5训练了自己的数据集后&#xff0c;test没问题&#xff0c;但是运行detect.py就报错了&#xff0c;一直找不到问题所在&#xff0c; 求大佬指点指点...

javascript正则表达式常用合集

javascript正则表达式常用的合集 参考网址 {n}: n 是一个正整数&#xff0c;匹配了前面一个字符刚好出现了 n 次 {n,}: n是一个正整数&#xff0c;匹配前一个字符至少出现了n次 {n,m}: n 和 m 都是整数。匹配前面的字符至少n次&#xff0c;最多m次。如果 n 或者 m 的值是0&…...

已申报纳税但延迟交款产生的滞纳金是否可以税前扣除?

提问:&emsp;&emsp;&emsp;&emsp;已申报纳税但延迟交款产生的滞纳金是否可以税前扣除?&emsp;&emsp;专家回复:&emsp;&emsp;所有税款的滞纳金均不能在企业所得税税前扣除,不论什么原因。&emsp;&emsp;政策依据:&emsp;&emsp;《…...

Android面试相关文章及Github学习资料,经典好文

目录 前言 Kotlin协程&#xff0c;现在已经成为了面试甚至是工作中一个非常火的东西。 本人在刚开始了解Kotlin协程的时候&#xff0c;断断续续看了网上不少文章&#xff0c;用长篇大论把Kotlin协程描述的非常玄乎&#xff0c;但是看完后还是依然云里雾里&#xff0c;所以决定…...

2021-05-27

第一步&#xff1a;双击打开已经安装好的ps软件。 第二步&#xff1a;进入ps软件是黑色界面。 第三步&#xff1a;在菜单栏中选择“文件”中的“新建”。 第四步&#xff1a;根据自己的需要设置新建画布的尺寸、大小&#xff0c;设置完成后单击“确定”按钮。 第五步…...

jedis

Hyperloglog 什么是基数&#xff1f;一组数据中不重复的个数 ​ A&#xff08;1,3,5,7,8,7&#xff09;B&#xff08;1,3,5,7,8&#xff09; ​ 基数 5 ​ 312312 简介 ​ redis2.8.9更新了hyperloglog数据结构&#xff01; ​ redis Hyperloglog基数统计算法&#xff01; …...

真互动是什么?实时面对面交流是真互动吗?

2021年6月2日&#xff0c;保利威无延迟直播首次全面对外发布&#xff0c;发布会全程在线直播&#xff0c;邀您一起见证技术的变革。欢迎预约直播&#xff01;&#xff01;&#xff01;&#xff08;另有无延迟直播线上交流邀请您加入&#xff0c;私信即可&#xff0c;还可领取无…...

简单快速复制CSDN上的博客到自己的电脑上(带图片和格式)

准备工具&#xff1a; typora &#xff08;md编辑器&#xff09;直接去官网https://www.typora.io/下载&#xff0c;一直点下一步。 下载好了后界面是这样的&#xff0c;清爽且好用。 需要做一点设置 【文件 - 偏好设置-图像】&#xff0c;如下设置。 软件已经安装好并且可…...

八年Java开发心路历程,mysql主从同步延迟有多久

前言 高并发&#xff0c;几乎是每个程序员都想拥有的经验。原因很简单&#xff1a;随着流量变大&#xff0c;会遇到各种各样的技术问题&#xff0c;比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等&#xff0c;这些问题能推动我们在技术深度上不断精进。 我们…...

【大数据Sqoop系列】 Sqoop基本使用

文章目录 Sqoop基本使用一、Sqoop 基本命令1. 查看所有命令2. 查看某条命令的具体使用方法二、Sqoop 与 MySQL1. 查询MySQL所有数据库2. 查询指定数据库中所有数据表三、Sqoop 与 HDFS3.1 MySQL数据导入到HDFS1. 导入命令2. 导入验证3.2 HDFS数据导出到MySQL四、Sqoop 与 Hive4…...

2021金九银十面试季!java引用传递自身关联结构

前言 苦苦寻觅找工作之间&#xff0c;殊不知今日之时乃我心之痛&#xff0c;难道是我不配拥有工作嘛。自面试后他所谓的等待都过去一段时日&#xff0c;可惜在下京东上的小金库都要见低啦。每每想到不由心中一紧。正处为难之间&#xff0c;手机忽然来了个短信预约后续面试。 我…...

史上最全!java取商符号

前言 在学习Java基础的过程中&#xff0c;泛型绝对算得上是一个比较难理解的知识点&#xff0c;尤其对于初学者而言&#xff0c;而且就算是已经有基础的Java程序员&#xff0c;可能对泛型的理解也不是那么透彻&#xff0c;属于那种看了明白&#xff0c;时间长了就忘的那种&…...

Vb.net/Uipath DataTable 中间插入行

首先插入行可以写一个assign to 看看&#xff1a; 参数是row和插入位置 然后使用invoke method(不需要返回值的函数)&#xff1a; nRow是我们创建的新行 nRow(0)是第一列&#xff0c;我这边填写当天 invoke Method参数&#xff1a; 对应写入DataRow和位置就可以&#xff0c;…...

第五周周记

初识BOOTSTRAP一、简介1、Bootstrap 包的内容二、Bootstrap 样式1、表格2、按钮3、图片二、BootStrap组件和插件1、导航栏2、页面标题3、列表组4、多媒体对象一、简介 1、Bootstrap 包的内容 基本结构&#xff1a;Bootstrap 提供了一个带有网格系统、链接样式、背景的基本结构…...

[算法总结] 约数 !

约数871. 约数之和(O√n M log M)细节:Code:871. 约数之和(O√n M log M) 细节: 因为ai的范围是 2e910 所以 如果使用 On的暴力枚举是必然超过的 借用Bug-Free一张图 ///若d > √n 是 N的约数 ///则 N/d < √n 也是N 的约数 ///换言之 约数总是成对出现的(除了完全平…...

jQuery-Mobile 学习笔记(1)

移动web开发学习笔记&#xff08;1&#xff09; 日期&#xff1a;2021/5/25 下午15&#xff1a;18开始 重点&#xff1a; jQuery-mobile开发学习&#xff1a; 在使用之前需要在<head>标签中引入&#xff1a; <meta name"viewport" content"widthde…...

脸你洗对了么?正确的洗脸方式快来学习一下吧!

大家都知道护肤很重要&#xff0c;那大家知道到么&#xff1f;其实清洁也是算在护肤当中的&#xff0c;并且它是护肤步骤中的重中之重&#xff01;脸洗对了护肤才有效果呦~你平时的脸洗对了么&#xff1f; 洗脸水温 用温水洗脸。温水是介于热水与冷水之间&#xff0c;起到了打…...

2021突击银四面试必备?并发编程+JVM必不可少

前言 永远不会有正当其时的时候&#xff0c;你总会觉得要么年纪太轻&#xff0c;要么太老&#xff0c;要么太忙&#xff0c;抑或是其他什么原因。如果你总是为找不到完美的时刻而困扰&#xff0c;那么&#xff0c;完美的时机永远不会出现。 阿里一面 1.自我介绍&#xff0c;包…...

tmux使用指南

目录TMUX安装MaxOSUbuntu快速使用进入一个session创建一个具名session列出所有session离开一个session进入一个session杀死一个session创建一个window列出所有window选择一个session中的window关闭一个window创建一个pane杀死一个pane列出所有的pane列出所有子命令一些关键概念…...

nrm报错 [ERR_INVALID_ARG_TYPE]

nrm 1.2.1报错&#xff1a; [TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefinedat validateString (internal/validators.js:122:11)at Object.join (path.js:375:7)at Object.<anonymous> (C:\Users\liyin…...

DBC 2000 安装

这玩意就是传奇用的数据库 DBC2000是一款专用于架设热血传奇和传奇世界的数据库程序&#xff0c;非常的强大&#xff0c;通常用于传奇私服的架设。 DBC2000软件截图1 软件特色&#xff1a; 1、附带了相应的注册机&#xff0c;能够成功激活软件&#xff0c;完美适用于32位和6…...

Mysql-case when 使用

转载&#xff1a;https://www.jianshu.com/p/1bfddf9fd91e...

Camera Lens Coating

Camera Lens Coating Coating Progress 转换镜头&#xff0c;根据要求进行OEM和设计。 光学元件&#xff1a;望远镜、显微镜、相机和数码相机镜头、放大镜头和远摄镜头、定心镜头、投影镜头、投影镜头、照明镜头、球面和非球面镜头、扫描镜头等。 不同透镜的应用 土建&#x…...

一般纳税人企业开户

...

C++STL map/multimap容器

1、map/multimap容器简介 map 的特性是所有的元素都会根据元素的键值自动排序。map所有元素都是pair(对组)&#xff0c;同时拥有实值和键值&#xff0c;pair的第一元素被认为是键值。不能通过map的迭代器改变map的键值&#xff0c;因为map的键值关系到map元素的排序规则&#…...

锋迷商城SpringCloud+Vue前后端分离2021微服务实战

锋迷商城项目是一个B2C商城&#xff0c;基于SpringCloud构建的大型千万级高并发电商系统。采用当下最主流的微服务分布式架构&#xff0c;前后端分离技术&#xff0c; 涵盖技术栈有&#xff1a;Vue、axios、Springboot、RESTful、mybatis、tkmapper、Swagger、任务调度Quartz/…...

mysql组合索引失效,看完必懂

一. 什么是架构和架构本质 在软件行业&#xff0c;对于什么是架构&#xff0c;都有很多的争论&#xff0c;每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前&#xff0c;我们先讨论架构的概念定义&#xff0c;概念是人认识这个世界的…...

VS2019集成Qt环境打开ui文件闪退问题

VS2019集成Qt环境打开ui文件闪退问题 记录贴 原因:在于工程中配置的QtVersion与ui打开方式的Designer的版本不一致就会出现ui闪退并提示“无法打开文件”。&#xff08;我装了多个版本的Qt&#xff0c;所以出现了这个现象&#xff0c;VS中会设置默认Qt Designer&#xff09; …...

C# udp通讯

目录 UDP常规通讯 服务器端 客户端 udpclient类通讯 服务器端 客户端 UDP常规通讯 udp和tcp通讯的最大差异就在于udp通讯不需要二者建立连接 服务器绑定好ip和端口号&#xff0c;客户端发信息时直接指定ip和端口发送即可。 服务器端 using System; using System.Colle…...

spark学习5:spark-shell

1.spark提供了交互式接口 spark-shell spark-shell 实现了用户可以逐行输入代码&#xff0c;进行操作的功能。 即可以不像Java一样&#xff0c;编写完所有代码&#xff0c;然后编译才能运行 spark-shell 支持 Scala交互环境 和 python交互环境 在学习测试中可以使用spark-s…...

【OneDrive篇】OneDrive禁用个人保管库(网页端)

【OneDrive篇】OneDrive禁用"个人保管库"&#xff08;网页端&#xff09; 最近OneDrive个人保管库一直同步出错&#xff0c;把文件全部移出来还是一样&#xff0c;就选择直接禁用"个人保管库"功能了—【蘇小沐】 文章目录【OneDrive篇】OneDrive禁用"…...

2021-5-20第一篇博客

今天的总结 天杀的男朋友! 还是学习不负我ATM32的ADC 为了完成任务&#xff0c;在原来的基础上优化ADC驱动代码和配置文件。 我做了哪些工作&#xff1a; 首先&#xff0c;八一八正点原子资源库有没有相关代码&#xff0c;发现还真有&#xff0c;而且还有详细的配置说明“…...

Java各个版本JDK下载

链接如下&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/AdoptOpenJDK/...

Python数学建模-01.新手必读

Python 完全可以满足数学建模的需要。 Python 是数学建模的最佳选择之一&#xff0c;而且在其它工作中也无所不能。 『Python 数学建模 Youcans』带你从数模小白成为国赛达人。 1. 数学建模新手入门 『Python 数学建模 Youcans』系列 是专门为学习数学建模、准备数模竞赛的…...

四川大学软件学院保研预推免面试面经

参加时间&#xff1a;2021年9月底&#xff0c;推免系统开放前 专业方向&#xff1a;软件工程专业 川大软件学院的保研夏令营&#xff08;2021年7月&#xff09;的面试过程&#xff0c;其实和我之前发的川大计科夏令营面试是一样的。所以要看夏令营的话&#xff0c;具体可以参…...

保险预处理项目实战经验汇总 2021-04-30

项目实战经验汇总 文章目录项目实战经验汇总vuex1. 定义nav-menu所需要的items、角色对应主页和全部页面、api方便集中管理&#xff1b;2. getters里面给出isLogin和roleInfo&#xff1b;3. mutations里面给出setUser和logout方法4. 在el-menu-item中使用 记得筛选角色权限下的…...

Java开发必须要会!javaweb网上购物系统加视频

Kubernetes简介 Kubernetes&#xff08;简称K8S&#xff0c;K和S之间有8个字母&#xff09;是用于自动部署&#xff0c;扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元&#xff0c;以便于管理和服务发现。Kubernetes 源自Google 15 年生产环境的运…...

12道Java高级面试题:银行java开发怎么样

前言 一般的小项目&#xff0c;比如几百人左右访问的项目&#xff0c;访问量几万的项目&#xff0c;如果想用缓存&#xff0c;单机实例完全够用。小黄图就是用的阿里云256MB配置的Redis缓存&#xff0c;日几千的访问量是妥妥够用的了。Redis号称可以支撑10wqps&#xff0c;当然…...

日常财务咨询

...

vue-cli项目启动时“Cannot find module ‘vue-loader-v16/package.json”解决方案

一、卸载vue-loader-v16依赖 npm uninstall vue-loader-v16 二、用cnpm安装vue-loader-v16依赖 cnpm i vue-loader-v16 安装cnpm的方法&#xff1a;安装淘宝npm&#xff08;cnpm&#xff09; (1)输入以下命令&#xff1a;、 npm install -g cnpm --registryhttps://registry…...

springboot在k8s使用configmap为配置中心

spring boot 在 k8s 使用 kubernets configmap作为配置中心 引用& 参考 https://amit4aws.medium.com/spring-cloud-kubernetes-configwatcher-7a206fe269e3 https://github.com/spring-cloud/spring-cloud-kubernetes#kubernetes-propertysource-implementations https://…...

img标签是行类元素,但是它能设置宽高。

img标签 必须的属性&#xff1a;src【写元素的地址】和alt【如果图片不能显示&#xff0c;展示在页面上的文字】 img是行类元素&#xff0c;但是它为什么能设置宽高&#xff1f; 它是可替换元素。 还有的可替换元素有【<img>、<input>、<textarea>、<sele…...

街机模拟器 WinKawaks 及街机 ROM 下载

能看到本文的&#xff0c;是缘分&#xff1b;能知道 WinKawaks 是什么的&#xff0c;我就大概知道了你的年龄。 但不得不说&#xff0c;WinKawaks 是 Windows 平台上一款不错的街机模拟器&#xff0c;其官方网址提供了模拟器下载及对 CPS1 CPS2 NeoGeo 街机 ROM 一网打尽的下载…...

elementUI-Tree 树形控件的使用

elementUI-Tree 树形控件的使用 实现效果&#xff1a; 控件的官方使用说明 控件要求返回的数据结构 {"success": true,"code": 20000,"message": "成功","data": {"items": [{"id": "1394579386…...

五面拿下阿里飞猪offer,java开发程序员

谈起MyBatis&#xff0c;我先提个问&#xff1a;什么是 MyBatis &#xff1f; MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解&…...

Android攒了一个月的面试题及解答,算法太TM重要了

前言 今天我给大家再次分享一下&#xff0c;我最近的一些读书的感想&#xff0c;思考起来&#xff0c;确实能够给自己带来一些真实的帮助和启发&#xff0c;希望大家在平时的工作学习中&#xff0c;也能够认清楚学习的一些本质。 如果我们的学习是在不断掌握应对具体工作场景…...

umeditor word文档图片粘贴-自动上传到服务器

如何做到 ueditor批量上传word图片&#xff1f; 1、前端引用代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/x…...

前端工程师使用adobe XD软件下载切图和测量距离的方法

在之前公司做前端时&#xff0c;基本都是直接跟蓝湖打交道&#xff0c;UI设计师会将设计好的PS文件&#xff0c;通过蓝湖提供的切图插件进行标记&#xff0c;然后整体画板上传到蓝湖项目中&#xff0c;然后前端通过蓝湖进行查看下载切图和测量间距等&#xff0c;而且蓝湖会自动…...

CentOS8安装Nginx

方式一&#xff1a;yum安装 安装: 1 yum install nginx 启用并启动Nginx服务&#xff1a; 1 2 $ sudo systemctl enable nginx $ sudo systemctl start nginx 停止服务&#xff1a; 1 $ sudo systemctl stop nginx 要验证服务是否正在运行&#xff0c;检查其状态&#x…...

LeetCode 448. 找到所有数组中消失的数字

LeetCode 448. 找到所有数组中消失的数字 一、题目详情 原题链接&#xff1a;https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/ 给定一个范围在 1 ≤ a[i] ≤ n ( n 数组大小 ) 的 整型数组&#xff0c;数组中的元素一些出现了两次&#xff0c…...

基于Python的数据可视化:从一维到多维

目录 一、iris数据集介绍 二、一维数据可视化 三、二维数据可视化 四、多维数据可视化 五、参考资料 一、iris数据集介绍 iris数据集有150个观测值和5个变量&#xff0c;分别是sepal length、sepal width、petal length、petal width、species&#xff0c;其中species有3个取…...

以字典为基础建立一个通讯录,向字典中添加和删除通讯人(名字、电话、email、工作单位等),查询某个人的信息,然后输出通讯录中所有人的信息。

首先想到的是利用字典创建一个人的信息&#xff0c;然后将各种字典组合为一个列表&#xff0c;但是在添加&#xff0c;删除的时候不是很方便&#xff0c; 于是想到利用类来创建一个人的对象&#xff0c;将对象传入字典中&#xff0c;但是&#xff0c;那字典有什么用吗&#xf…...

《Real-Time Rendering 4th Edition》全文翻译 - 第15章 非真实感渲染(上)15.1~15.5

好久没更新了~ 由于对NPR方面比较感兴趣&#xff0c;所以任性了一下&#xff0c;先翻译了这一章~ 业余翻译&#xff0c;若有不周到之处&#xff0c;还请多多指教&#xff01; 实时渲染&#xff08;第四版&#xff09;Real-Time Rendering (Fourth Edition) 第15章 非真实感渲…...

分公司注册

...

2021年安全员-C证(陕西省)考试报名及安全员-C证(陕西省)考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-C证&#xff08;陕西省&#xff09;考试报名是安全生产模拟考试一点通总题库中随机出的一套安全员-C证&#xff08;陕西省&#xff09;考试试卷&#xff0c;在公众号安全生产模拟考试一点通上点击安全员-C证&a…...

yum 查找搜索某个命令如何下载

第一种方法 yun provides iostat[rootzabbix-agent1 ~]# yum provides iostat Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile> sysstat-10.1.5-19.el7.x86_64 这个就是需要安装的包: Collection of performance monitoring tools for Lin…...

iOS LeetCode ☞ 二叉树的层序遍历

给你一个二叉树&#xff0c;请你返回其按 层序遍历 得到的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例&#xff1a; 二叉树&#xff1a;[3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回其层序遍历结果&#xff1a; [[3],[9,20],[1…...

爬两千张妹子图,我只需要10行代码!这就是Python的魅力!

一切的起点&#xff0c;10 行代码集美女 前奏篇 目标数据源分析 本次待抓取的目标地址为&#xff1a; 抓取目标&#xff1a; 抓取该网站的图片&#xff0c;目标 2000 张。 用到的 Python 框架为&#xff1a; requests 库、re 模块 其它技术栈补充&#xff1a; 正则表达式 目…...

在阿里工作5年了,java开发几月份好找工作

前言 现在刷抖音经常可以看到一些老外街坊&#xff0c;问他们最想把什么带回自己的国家&#xff0c;我听过很多的回答都是&#xff1a;淘宝&#xff0c;支付宝&#xff0c;美食&#xff0c;微信&#xff0c;外卖&#xff0c;高铁等等。 确实如此&#xff0c;随着国家的快速发…...

【硬盘测速】一条命令解决硬盘测速问题

硬盘测速前言使用步骤End前言 刚买到的硬盘装好之后&#xff0c;大部分人都会对硬盘进行测速&#xff0c;普遍会想到的测速方法是下载测速软件测试一下&#xff0c;但是有一种方法既简便又快速&#xff0c;就是利用Windows自带的命令进行测速。 使用步骤 命令格式为【比如是…...

GCD - Extreme (II) UVA - 11426 (欧拉函数+一个数与所有小于它的数的gcd的和)

传送门 题意&#xff1a;给定2<n<4e6&#xff0c;求G 题解&#xff1a;UVA11426 GCD - Extreme (II) 欧拉函数应用 先求一个数与所有小于它的数的gcd的和然后就是求前缀和的问题了求一个数与所有小于它的数的gcd的和&#xff1a; 具体实现见代码 如 &#xff08;所有除开…...

SpringIOC源码分析

IOC容器介绍 Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系&#xff0c;利用 Java 语言的反射功能实例化 Bean 并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上&#xff0c;还提供了 Bean 实例缓存、生命周期管理、 Bean 实例代理、事…...

时间差怎么计算?

如何将两个时间变量进行相减&#xff1f; public static void test(String endDate,String newDate) throws ParseException {long nd 1000 * 24 * 60 * 60;long nh 1000 * 60 *60;long nm 1000 * 60;SimpleDateFormat df new SimpleDateFormat("yyyy-MM-dd HH:mm:ss…...

大数据技能竞赛(2)_安装JDK

安装JDK1.在根目录下建立工作路径/usr/java2.进入创建的java工作路径3.下载java安装包(master上执行)4.修改环境变量&#xff1a;5.生效环境变量&#xff1a;6.查看 java 版本&#xff1a;7.在 master 中将 JDK 复制到 slave1 和 slave2 中&#xff08;在 master 执行&#xff…...

Kettle中文乱码问题

最近使用kettle从测试环境迁移数据到生产环境 &#xff0c;遇到中文乱码问题。 找了很久资料&#xff0c;最终才解决。 解决方法&#xff1a; 在 起始数据库 跟 目标数据库 的选项里 都配置编码 (characterEncodingutf8)&#xff1a; 然后运行就ok了 如果不行&#xff0c;…...

关于.NET微服务最热门的问题解答

在我们最近让我们一起学习.NET的微服务专场活动中&#xff0c;我们收到了一些很好的问题。我们在现场已经回答很多问题&#xff0c;但我们想继续回答一些在会议中出现的最热门的问题。如果你错过了现场直播&#xff0c;不要担心&#xff0c;因为你可以按需观看。 观看视频 当…...

Java使用策略模式替换掉 if else

Java使用策略模式替换掉 if else 我们的代码中常常大量的使用 if else &#xff0c;如果条件在不断的增加&#xff0c;我们就需要继续在后面增加if else&#xff0c;代码就会越来越臃肿&#xff0c;可读性差&#xff0c;后期非常不好维护,下面给大家分享一下策略模式的使用。 …...

五、JavaScript 数据类型 - - - null, undefined 和布尔值篇

1&#xff0c;null 和 undefined 1.1 概述 null与undefined都可以表示“没有”&#xff0c;含义非常相似。将一个变量赋值为undefined或null&#xff0c;老实说&#xff0c;语法效果几乎没区别。 var a undefined; // 或者 var a null;上面代码中&#xff0c;变量a分别被赋…...

海康威视【2022届超新星】应用软件开发工程师-C\C++校招面经

20210527武汉岗校招 1、自我介绍 2、什么是虚函数&#xff1f;构造函数能不能是虚函数&#xff1f;为什么。 不能&#xff0c;虚函数的调用需要虚函数表指针&#xff0c;而该指针存放在对象的内存空间中&#xff1b;若构造函数声明为虚函数&#xff0c;那么由于对象还未创建&am…...

pytorch中的矩阵乘和点乘

下面是pytorch中的矩阵乘&#xff0c;三种方式结果相同 tensor torch.ones(4, 4)y1 tensor tensor.T y2 tensor.matmul(tensor.T)y3 torch.rand_like(tensor) torch.matmul(tensor, tensor.T, outy3)下面是pytorch中的点乘&#xff0c;三种方式结果相同 tensor torch.o…...

App 结构

文章目录apk 包结构app 页面结构apk 包结构 apk&#xff1a; Android Package&#xff0c;即 Android 安装包 &#xff08;apk文件其实是zip格式&#xff0c;是后缀名被修改为apk&#xff0c;可以通过反编译{解压缩} 来查看&#xff09; lib/ res/ assets/ classes(n).dex re…...

修改PDF文件中的内容需要用到什么软件

PDF文件中的内容可以修改吗&#xff1f;怎么才能修改呢&#xff1f;需要用到什么软件&#xff1f; 日常办公用到的PDF格式的文件比较多&#xff0c;你是否也有以上的疑问&#xff1f;对于PDF文档除了打开查看外&#xff0c;使用最多的还得是修改。 关于如何修改PDF以及用到的…...

离线安装 Docker

文章目录一、下载 Docker 离线包二、离线安装工具三、安装四、镜像加速五、确认安装结果一、下载 Docker 离线包 https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz 在这里可以选择自己需要的版本进行下载&#xff1a; https://download.docker.com…...

DM8 MPP(不带主备)集群的搭建

1 环境准备 实例名 MAL_HOST PORT_NUM MAL_PORT MALL_DW_PORT MPP_SEQNO EP1 172.16.20.184 5238 5337 5253 0 EP2 172.16.20.55 5238 5337 5253 1 2 配置 1 创建实例 1号机&#xff1a; ./dminit PATH/home/dmdba/dmdbms/data DB_NAMEEP1 INSTANCE_NAME&…...

最新Android面试题整理,看这一篇就够了!

开头 又到年底了&#xff0c;每到这个时候&#xff0c;我们都会慢慢反思&#xff0c;这一年都做了什么&#xff1f;有什么进步&#xff1f;年初的计划都实现了吗&#xff1f;明年年初有跳槽的底气了吗&#xff1f;况且今年的互联网环境太差&#xff0c;需要自己有足够的知识储…...

Java基础知识最全(终于有人讲明白了!!!)

像Java的数据类型、Java运算符、Java的流程控制、Java面向对象、Java的异常处理&#xff0c;这些都是最基础的东西&#xff0c;是初学Java的时候必须掌握的知识点。—关注乐字节带你进入Java的世界。 一&#xff1a;java概述&#xff1a; 1991 年Sun公司的James Gosling&…...

anaconda版本目录与下载网址

https://repo.anaconda.com/archive/...

ThingJS粒子特效一键实现雨雪效果

1、粒子效果 2、加载场景 3、不同粒子效果实现 在做3D项目时&#xff0c;我们经常需要模拟下雨&#xff0c;下雪的天气&#xff0c;有时也会模拟喷泉、着火等效果。这些效果需要使用名为粒子系统(particle)的技术来实现。使用ThingJS可以快速编写粒子效果&#xff0c;比如&…...

保险预处理项目实战经验汇总 2021-04-30

项目实战经验汇总 文章目录项目实战经验汇总vuex1. 定义nav-menu所需要的items、角色对应主页和全部页面、api方便集中管理&#xff1b;2. getters里面给出isLogin和roleInfo&#xff1b;3. mutations里面给出setUser和logout方法4. 在el-menu-item中使用 记得筛选角色权限下的…...

go iris nuxt 在helloworld社区中的应用

大家好&#xff0c;helloworld.net 上线已经有近半年的时间了&#xff0c;转眼过的好快&#xff0c;在这半年的时间里&#xff0c;迭代了近10多个版本&#xff0c;优化了很多的体验&#xff0c;交互上的不足之处&#xff0c;同时也上线了我们的安卓 app&#xff0c; 苹果的因为…...

【解决方案】监控技术助力养猪行业高质量发展!

一、背景现状 随着农业产业结构的调整&#xff0c;我国畜牧业迅猛发展&#xff0c;其中生猪养殖发展尤为迅速&#xff0c;主要表现为养殖规模的不断扩大和养殖场数量不断增多。但是近年来&#xff0c;因为生猪市场波动和生猪疫情的出现&#xff0c;我国生猪产业进入了一个非常剧…...

整理几个重要的Android知识,全网疯传

前言 最近看到很多人都在找工作, 而且很多人都感觉今年找工作比去年难很多, 竞争力也增加不少, 因此激发我整理这份资料, 希望能帮到正在找或者准备找工作的童鞋们. 首先我们能否获得一个面试机会, 那肯定是从简历开始, 简历需要做好功夫, 一份好的简历才足够吸引企业得到面试…...

有问有答,50道保姆级运维面试题,包教包会

有问有答&#xff0c;50道保姆级运维面试题&#xff0c;包教包会一、网络部分1、三次握手、四次挥手分别解释一下过程以及为什么是四次挥手&#xff1f;2、常用的TCP\UDP端口号及其功能3、BGP有哪几种类型&#xff0c;分别用于哪些场景&#xff1f;4、点到点与端到端通信5、OSP…...

C语言链表

链表是一种“链式”存储数据的结构&#xff0c;通过指针&#xff0c;可以把每一个元素连接起来&#xff0c;形成一个数据集合。假设有如下3个int类型的变量&#xff1a; int a1, a2, a3; 那么&#xff0c;我们可以把它组成一个集合&#xff0c;如下&#xff1a; 可以看到&…...

(四)HttpServletRepuest

public class httpRequest extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // req.getRequestURI获取请求的资源路径System.out.println("获取请求的资源路径为&a…...

ffmpeg安装与使用

1.ffmpeg编译 1.1 编译准备 windows下 minGW 下载地址mysy 下载地址ffmpeg源码 git clone https://github.com/FFmpeg/FFmpeg.git 1.2 编译ffmpeg 进入mysy安装文件夹 运行mysy.bat 切换到ffmpeg目录 ./configure --enable-shared --enable-static --disable-x86asm --en…...

推荐学习!超全Android中高级面试复习大纲,大厂面经合集

前言 这些题目是网友去美团等一线互联网公司面试被问到的题目。笔者从自身面试经历、各大网络社交技术平台搜集整理而成&#xff0c;熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。 主要分为以下几部分&#xff1a; &#xff08;1&#xff09;Android面试题 …...

掌握这十个搜索技巧让你的工作效率至上提高十倍!薪资翻倍

前言 对于很多没有学历优势的人来说&#xff0c;面试大厂是非常困难的&#xff0c;这对我而言&#xff0c;也是一样&#xff0c;出身于专科&#xff0c;原本以为就三点一线的生活度过一生&#xff0c;直到生活上的变故&#xff0c;才让我有了新的想法和目标&#xff0c;因此我…...

三年Java开发,mysql安装步骤图解

前言 我想&#xff0c;很多人和我一样在煎熬中度过着2021年&#xff0c;也经历了不少困难&#xff0c;随着国家对疫情的控制&#xff0c;互联网行业又重新迎来了生机。 我在2021年拿到了阿里Java研发岗的offer&#xff0c;也算是正式提桶进大厂的打工人了。于是乎&#xff0c…...

JDK安装并配置环境变量

jdk下载链接https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html 1更改安装JDK路径 安装路径推荐选择C:\Program Files\Java\jdk1.8.0_31 2选择安装Jre路径 安装路径推荐选择C:\Program Files\Java\jre1.8.0_31 3.右击我的电脑&#xff0c;属…...

MySQL用户管理类问题

https://app.yinxiang.com/fx/ed17c015-f95e-44f5-beae-47590f615ce1...

5.7 数值分析: 三次样条插值

本文内容为东北大学数值分析国家精品慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看&#xff0c;特将此上传到CSDN博文中, 源文件已经上传到我的资源中,有需要的可以去看看,…...

【微信小程序】java验证码识别训练

前言 今天来带大家研究一下Linux内存管理。对于精通 CURD 的业务同学&#xff0c;内存管理好像离我们很远&#xff0c;但这个知识点虽然冷门&#xff08;估计很多人学完根本就没机会用上&#xff09;但绝对是基础中的基础&#xff0c;这就像武侠中的内功修炼&#xff0c;学完之…...

Elasticsearch-尚硅谷(8. 优化)学习笔记

上一篇&#xff1a;&#xff08;7. 进阶-下&#xff09;学习笔记 文章目录1. 硬件选择2. 分片策略2.1 合理设置分片数2.2 推迟分片分配3 路由选择4 写入速度优化4.1 批量数据提交4.2 优化存储设备4.3 合理使用合并4.4 减少 Refresh 的次数4.5 加大 Flush 设置4.6 减少副本的数量…...

我了解到的面试的一些小内幕!已拿offer入职

前言 前面一篇文章分享了最近整理的大家伙的面试经历总结&#xff0c;有兴趣可以去翻看一下。这位去百度面试的小A同学的面试经历很有趣&#xff0c;因为他拿到了offer但是并没有去&#xff0c;在了解原因后挺认同他的想法的。这种职业价值观我觉得对很多人非常有参考意义。 …...

5.3 数值分析: 差商的定义及性质

本文内容为东北大学数值分析国家精品慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看&#xff0c;特将此上传到CSDN博文中, 源文件已经上传到我的资源中,有需要的可以去看看,…...

快手“钱”途为何总是这么坎坷

短视频一经推出&#xff0c;就以其天然的娱乐属性而受到了许多年轻人的青睐&#xff0c;其迅猛增长的态势更是吸引了众多玩家参与其中。但经过行业的大洗牌之后&#xff0c;抖音和快手逐渐成为了“短视频双雄”。此前不久&#xff0c;以“短视频第一股”身份登陆港股资本市场的…...

【大牛疯狂教学】java语言编程好学吗

为什么要公开这些面试题&#xff1f; 原因一&#xff1a;身边从事 Java 开发的人员越来越多&#xff0c;我的表弟表妹们&#xff0c;朋友的表弟表妹们&#xff0c;朋友的朋友的表弟表妹们&#xff0c;每次问我要相同的面试复习材料&#xff0c;已经让我疲于应付&#xff0c;索…...

JAVA序列化和反序列化

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 JAVA序列化和反序列化一、基本概念1、什么是序列化和反序列化2、为什么需要序列化与反序列化3、序列化算法一般会按步骤二、Java如何实现序列化和反序列化1、JDK类库中序列化…...

有限差分法下-一维中的显示有限差分(python)

第五十二篇 有限差分法 抛物线系统 对于典型的抛物型方程&#xff0c;例如“传导”或“固结”方程&#xff0c;要求在时间上有边界条件和初始条件。然后&#xff0c;只要需要的话&#xff0c;就会求出对应时间的解。与椭圆问题不同的是&#xff0c;如下图所示&#xff0c;解域…...

Rust 学习笔记

参考链接 如何提升C语言安全性&#xff0c;达到RUST的安全性如何看待 Rust 的应用前景Abstraction without overhead: traits in RustRust Once, Run EverywhereVirtual Structs Part 1: Where Rust’s enum shines...

微信小程序趋势及前景,大厂直通车!

最近看到群里看到一个女生&#xff0c;讲述了她从开始选择Android&#xff0c;经过非常努力的学习和挣扎&#xff0c;然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜&#xff0c;如果早几年入行可能结果会比现在好很多&#xff0c;但可惜&#xff0c;这就是…...

最小生成树

文章目录1.最小生成树2.信息广播问题单播解法洪水解法最小生成树算法Prim算法Prim算法示例Prim算法&#xff1a;最小生成树视频地址推荐阅读1.最小生成树 本算法涉及到在互联网中网游设计者和网络收音机所面临的问题:信息广播问题 网游需要让玩家获知其他玩家所在的位置收音机…...

JDK配置

JDK及IDEA安装JDK配置IDEA配置JDK配置 以JDK1.8为例&#xff1b; 需注意&#xff0c;jdk安装路径中不要包含中文&#xff1b; 安装成功后&#xff0c;在DOS窗口执行java -version命令可弹出以下界面&#xff0c;说明安装成功&#xff1b; d:表示切换至D盘&#xff1b; cd 文件…...

Linux源码编译安装apache httpd2.4.48

Apache httpd httpd是Apache基金会的HTTP服务器项目&#xff1a;HTTP Server projecthttpd-2.4系列本版&#xff0c;依赖于apr-1.4, apr-util-1.4APR&#xff08;Apache portable Run-time libraries&#xff09;Apache可移植运行库&#xff0c;主要为上层的应用程序提供一个可…...

[Bristol52]Sigma协议正确性、公正性和零知识性

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。 在Sigma协议中&#xff0c;正确性&#xff0c;公正性和零知识性意味着什么? Sigma协议 一个更一般的理解 …...

linux下使用nexus搭建maven私服

linux下使用nexus搭建maven私服 下载maven 下载地址&#xff1a; https://maven.apache.org/download.cgi 这里下载的是最新版本 上传到服务器 /usr/local 目录后解压&#xff1a; tar -zxvf apache-maven-3.8.1-bin.tar.gz然后编辑linux的环境变量属性&#xff1a; vim et…...

带着问题深入学习Handler,技术详细介绍

导语 本文的目的很简单&#xff0c;一句话&#xff1a;用最少的时间&#xff0c;最高效率&#xff0c;让你清楚&#xff1a;想要做Android开发&#xff0c;你需要学什么&#xff1f;你该在哪学&#xff1f; 本文的特点在于将繁琐的知识化为系列专题的形式展现给读者&#xff…...

2021-05-24

浅谈设计模式&#xff08;二&#xff09; 文章目录 目录 浅谈设计模式&#xff08;二&#xff09; 文章目录 一.Decorator装饰器模式 二.ChainOfResponsibility责任链和Observer观察者 三.Composite组合模式和Flyweight享元模式 四.代理模式Proxy 一.Decorator装饰器模式 装饰器…...

vue-cli开启gzip打包报错TypeError: Cannot read property ‘tapPromise‘ of undefined-解决

给项目增加gzip打包 yarn add compression-webpack-plugin -D&#xff08;默认安装的是7以上的最新版本&#xff09; 修改vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin);configureWebpack: {plugins: [new CompressionWebpackPlugin({f…...

react实现vue中的双向绑定

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initial-sc...

Java8的新特性

java8的新特性 1.几个常用特性 1.Lambda表达式2.方法引用3.默认方法4.新工具5.StreamApi6.Date Time Api7.Optional 解决了空指针异常8.Nashorn,javaScript引擎2.Lambda表达式的基本用法 1.初识&#xff1a;使用Lambda表达式实现一个线程 public static void testRunnabl…...

解惑小白苦恼:成员变量、局部变量、类变量、静态变量和实例变量

声明&#xff1a;如果你觉得自己掌握的不错的话&#xff01;那就直接看总结吧&#xff0c;总结在后面哦&#xff01; 看到标题时&#xff0c;肯定有同鞋会有疑问&#xff1f;类变量不就是静态变量吗&#xff1f;等等一系列问题。对&#xff0c;你说的没错&#xff01;这说明你有…...

mysql组合索引失效,看完必懂

一. 什么是架构和架构本质 在软件行业&#xff0c;对于什么是架构&#xff0c;都有很多的争论&#xff0c;每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前&#xff0c;我们先讨论架构的概念定义&#xff0c;概念是人认识这个世界的…...

Linux下g++编译c++程序过程说明

文章目录事前准备一.g 编译代码的过程示例二.使用g生成静态链接库和动态链接库生成静态链接库生成动态链接库三.静态编译与动态编译程序静态编译程序动态编译程序四.动态链接库的添加方式五.动态链接库以及头文件搜索顺序动态链接库头文件参考&#xff1a;https://blog.csdn.ne…...

Type Script 学习笔记

一、什么是TypeScript 以javaScript 为基础构建的语言&#xff0c;可以在任何支持javaScript的平台中运行&#xff0c;Ts不能被js解析器直接执行&#xff0c;需要将ts文件编译成js文件一个javaScript的超集&#xff0c;TypeScript扩展了JavaScript并添加了类型 二、TypeScript增…...

集成算法简介

1、集成学习概述 集成学习&#xff08;EnsemblelearningEnsemble learningEnsemblelearning&#xff09;的目的是让机器学习的的效果更好&#xff0c;一个不行&#xff0c;就多个一起。 常用的有三种方式 Bagging&#xff1a;训练多个分类器取平均 f(x)1/M∑m1Mfm(x)f(x)1 / …...

Flutter 3.7 之快速理解 toImageSync 是什么?能做什么?

随着 Flutter 3.7 的更新&#xff0c; dart:ui 下多了 Picture.toImageSync 和 Scene.toImageSync 这两个方法&#xff0c;和Picture.toImage 以及 Scene.toImage 不同的是 &#xff0c;toImageSync 是一个同步执行方法&#xff0c;所以它不需要 await 等待&#xff0c;而调用 …...

Unity动画之1D混合和2D混合

Parameter 参数&#xff0c;用于控制混合的参数&#xff0c;在参数列表中的参数 图像 可以在这里拖拽控制n个动画的阈值 Motion 关联的动画列表&#xff0c;可以用鼠标改变顺序 Threshold 对应动作的临界阈值 当等于这个值时动作权重最大&#xff08;完全播放该动作&…...

离散数学 图论

1 图的基本概念 1、<V,E>是一个图 其中V代表顶点E表示边2、零图&#xff1a;图的边集E为空集 3、平凡图&#xff1a;只有一个结点的零图 4、平行边&#xff1a; 1 在无向图中&#xff1a;有两条或两条以上的边与同一对结点相关联 2 在有向图中&#xff1a;一序偶对应两…...

堆内存溢出定位(Heap Dump)

配置 jvm 参数&#xff0c;内存溢出时会自动HeapDump&#xff08;指定 dump 文件路径是可选的&#xff09; -Xms20m -Xmx20m -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/home或者用 jmap jmap -dump:formatb,file<filename.hprof> <pid>必要时将dump文件从…...

设计模式(六)----创建型模式之原型模式

1、概述 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 2、结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。 具体原型类&#xff1a;实现抽象原型类的 clo…...

【GD32F427开发板试用】USR-C210 WIFI模块进行以太网通信

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;小蜗牛 一、硬件介绍 USR-C210 硬件上集成了 MAC、基频芯片、射频收发单元&#xff0c;尺寸小&#xff0c;易于焊接在客户的单板电路上&#x…...

MOS管的工艺和工作原理

内部结构和表示符号 参考&#xff1a;https://blog.csdn.net/weixin_63069480/article/details/125552621&#xff0c;https://www.bilibili.com/video/BV1N8411T77d/?p9&spm_id_frompageDriver&vd_source00bd76f9d6dc090461cddd9f0deb2d51 工作过程原理 从上图中的…...

区块链学习4-长安链并发测试(2)_部署链

上一篇&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/128927000 二、部署链和prometheus配置 1. 单机模式下部署长安链 https://docs.chainmaker.org.cn/quickstart/通过命令行体验链.html 下载源码&#xff1a; git clone -b v2.3.0 https://git.chainmaker.…...

持续集成Jenkins (一)部署安装

前言环境清单&#xff1a;CentOS7.8安装JDK8或以上版本安装Maven仓库&#xff0c;因一般java程序是由maven工程&#xff0c;需要maven打包git/svn客户&#xff0c;因一般代码是放在git/svn服务器上的&#xff0c;我们需要拉取代码以上是自动化部署java程序jenkins需要的基本环境…...

【鼠标手势】Mouselnc使用笔记/Mouselnc+AHK=无敌好用/鼠标手势分享

当鼠标手势Mouselnc遇上AHK真的太好用了&#xff0c;让win的体验直接更上一层楼。AHK负责改键改功能&#xff0c;Mouselnc负责输出。首先介绍的是Mouselnc的附带功能&#xff0c;这是在众多手势软件中选它的原因&#xff0c;再分享个人常用的手势。 Mouselnc的附带功能 边缘滚…...

JavaScript电子表格:Handsontable 12.3.1

改进嵌套数据结构的工作。2023 年 2 月 7 日 - 10:22 新版本特征 改进了嵌套数据结构的处理。添加了“复制带标题的单元格”功能的日语翻译。外观和感觉都像电子表格的 JavaScript 数据网格。 Handsontable 是一个 JavaScript/HTML5 数据网格组件&#xff0c;具有独立于任何外部…...

【C语言】编程初学者入门训练(3)

文章目录21. 时间转换22. 总成绩和平均分计算23. 计算体重指数24. 计算三角形的周长和面积25. 计算球体的体积26. 大小写转换27. 2的n次方计算28. kiki和酸奶29. 发布信息30. 输出学生信息21. 时间转换 问题描述&#xff1a;给定秒数 seconds &#xff0c;把秒转化成小时、分钟…...

春招 | 标题不重要,待遇好是王道

还沉浸在满桌佳肴、胡吃海喝的喜悦里&#xff1f;依稀能听到耳边爆竹声的此起彼伏&#xff1b;一晃神&#xff0c;已经坐在了办公桌前假期就在猝不及防中悄然溜走了。请叫我一声最强打工仔吧&#xff0c;让我迷失在对工作的热爱中&#xff0c;写完这篇求才文章。一、职位信息01…...

大众集团率先启用高通下一代计算平台,技术升级战打响

全球汽车制造商正在进入芯片平台的切换周期&#xff0c;这是新一轮技术升级战的信号。 2021年&#xff0c;作为全球前两大汽车巨头之一的丰田汽车&#xff0c;决定从2023年开始&#xff0c;在旗下品牌的多款车型陆续采用Mobileye采埃孚的方案来替代一直使用的电装方案。 而另…...

OOP的弊端:自顶向下还是自底向上

[译者注]前不久翻译了Eric Raymond对几大开发语言的评价&#xff0c;引起了网友的热烈讨论。其中涉及到Eric Raymond对OO的批评&#xff0c;引起大家的争议。为此我再翻译他的一段相关文字&#xff0c;请大家阅读思考。模块化 —— Keep it clean, keep it simple程序员所面对的…...

Spring Cloud Bus-4.0.1 附录A

这里写目录标题附录 A&#xff1a;常见的应用程序属性参考地址附录 A&#xff1a;常见的应用程序属性 可以在application.properties文件内部application.yml、文件内部或作为命令行开关指定各种属性。本附录提供了一个常见的 Spring Cloud Bus 属性列表以及对使用它们的底层类…...

cherry-pick等git 高效率命令

前言使用 Git 作为代码版本管理&#xff0c;早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送&#xff0c;遇到一些commit管理的问题就束手无策&#xff0c;或者用一些不优雅的方式解决。本文分享我在开发工作中实践过的实用命令。这些都能够大…...

椭圆曲线标量乘法快速算法及源码分析

一、椭圆曲线密码算法 椭圆曲线密码算法(elliptic curve cryptograph,ECC)是一类重要的密码算法。椭圆曲线有如下性质: 有限域上椭圆曲线在点加运算下构成有限交换群,且阶与基域规模相近;类似于有限域乘法群的乘幂运算,椭圆曲线多倍点运算构成一个单向函数。ECC安全性依…...

Spring Boot 最核心的 25 个注解

1、SpringBootApplication这是 Spring Boot 最最最核心的注解&#xff0c;用在 Spring Boot 主类上&#xff0c;标识这是一个 Spring Boot 应用&#xff0c;用来开启 Spring Boot 的各项能力。其实这个注解就是 SpringBootConfiguration、EnableAutoConfiguration、ComponentSc…...

Qt开发遇到的坑,创建项目、支持中文、弹出控制台、qt4和qt5切换、内存越界

1、设置创建项目的默认目录 设置好对应创建目录后&#xff0c;勾选上“设为默认的项目路径”&#xff0c;之后创建的目录都会在这目录下&#xff0c;再改改编译生成目录不在上层&#xff0c;就不用改构建目录 2、更改编译后生成文件所在目录 点击工具》选型 构建和运行》Defa…...

记录一次内存调优实战

记录一次内存调优实战 测试使用adb monkey频繁测试App的拍照功能&#xff0c;发现内存持续升高&#xff0c;GC后仍缓慢持续升高&#xff1b; 业务场景描述 拍照界面大致如下&#xff1a; 和传图相机拍照稍许不同&#xff0c;此拍照业务是&#xff1a;点击拍照按钮 —> 系…...

持续集成Jenkins (三)基础配置

界面配置介绍1.1 界面总览1.2 详细配置1.2.1系统配置此处定义Jenkins的全局消息&#xff0c;或者是邮箱的配置。1.2.2全局安全配置主要是配置用户访问的控制&#xff0c;这里仅开启允许用户注册&#xff0c;这样的话&#xff0c;可以让所有开发测试小伙伴在这里以自己的名字注册…...

Tomcat 管理配置

目录 1.host-manager 2.manager 从早期的Tomcat版本开始&#xff0c;就提供了Web版的管理控制台&#xff0c;他们是两个独立的Web应用&#xff0c;位于webapps目录下。Tomcat 提供的管理应用有用于管理的Host的host-manager和用于管理Web应用的manager。 1.host-manager Tomca…...

小白系列Vite-Vue3-TypeScript:002-配置别名

上一篇我们已经初始化了一个ViteVue3TypeScript项目&#xff0c;本篇我们来介绍如何给项目配置别名。之所以要配置别名最直观的就是可以在项目开展编写代码时&#xff0c;避免出现类似 "../../../views/index.vue" 这样乱七八糟、层层嵌套式的路径引用。先安装types/…...

Linux下创建定时任务监控zookeeper进程,异常时自动启动

背景&#xff1a;在有一台服务器上的zookeeper进程会莫名其妙的消失&#xff0c;暂时没找到原因&#xff0c;放假前决定先临时写一个脚本进行监控&#xff0c;消失了就自动启动一下 目录 理论步骤 实现步骤 1、编写脚本并定义zookeeper的bin目录及配置文件以及定时任务周期…...

C语言基础知识(62)

内存本质编程的本质其实就是操控数据&#xff0c;数据存放在内存中。因此&#xff0c;如果能更好地理解内存的模型&#xff0c;以及 C 如何管理内存&#xff0c;就能对程序的工作原理洞若观火&#xff0c;从而使编程能力更上一层楼。大家真的别认为这是空话&#xff0c;我大一整…...

I am a boy!

对于一个字符串&#xff0c;请设计一个算法&#xff0c;只在字符串的单词间做逆序调整&#xff0c;也就是说&#xff0c;字符串由一些由空格分隔的部分组成&#xff0c;需要将这些部分逆序。例&#xff0c;输入"I am a boy!", 输出"boy! a am I"#include&l…...

elementUI el-table上移下移

<el-table :data"channelForm.selectedChannelList" style"width: 100%"> <el-table-column type"index"> </el-table-column> <el-table-column prop"...

iOS 首页标题支持展示图片点击展示lottie动画实现方案

现状&#xff1a;app首页标题只支持展示文字 需求 app首页标题支持展示图片&#xff0c;json 动画 如图 实现思路&#xff1a;将需要展示的资源包下载到沙盒中&#xff0c;在创建频道标题视图的时候&#xff0c;根据该频道在沙盒中是否有对应的图片、json资源来确定是否展示…...

Python安全攻防之第一章渗透测试概述

渗透测试的具体方法一、如何绕过CDN获取网站的真实IP地址通过内部邮箱获取。一般情况下&#xff0c;邮箱服务器位于内网&#xff0c;我们可以通过注册邮箱或者订阅邮件&#xff0c;目的就是让对方给我自己发送邮件&#xff0c;这样查看邮件的原始邮件头&#xff0c;就会发现邮件…...

MySQL-45讲学习笔记(1-3)

0. 开篇词 0.1 学习专题目的 在工作中对于MySQL&#xff0c;最重要的两点就是&#xff1a;如何设计表&#xff0c;还有如何对表查询进行优化&#xff01;能够写出逻辑正确的SQL语句&#xff0c;同时也能够知道语句是不是最优的数据库使用出现了问题&#xff0c;能够快速定位问…...

指针赋值问题

最近写了个代码&#xff0c;被日本客户指出来有问题&#xff0c;对此做了一项研究。 我最开始的时候写的是&#xff1a; char *pointer NULL; pointer “string”; printf(“%s\n”, pointer); 日本客户指出&#xff0c;pointer当前没有分配空间&#xff0c;给它赋值是不规…...

DOM编程-获取文本框的value

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>DOM编程-获取文本框的value</title> </head> <body> <script> /* 1、JavaS…...

Android基础教程——从入门到精通(下)

本文是对B站教程 动脑学院 Android教程 学习过程中所做的笔记。文章分为上下两部分&#xff0c;此文是下部分&#xff0c;上部分链接为&#xff1a;Android基础教程——从入门到精通&#xff08;上&#xff09;。源视频教程并没有录制全&#xff0c;本文还补充了 Service 和 网…...

leadtools 22.0.6 Crack .NET 7 Support

Charlotte, NC (January 9, 2023) - LEAD is pleased to announce the release of another major update to LEADTOOLS Version 22. Highlighting this release is support for .NET 7, the ability to add eSignatures to documents and PDFs, significant recognition enha...

Day882.隐式函数转换索引问题 -MySQL实战

隐式函数转换索引问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于隐式函数转换索引问题的内容。 在 MySQL 中&#xff0c;有很多看上去逻辑相同&#xff0c;但性能却差异巨大的 SQL 语句。 对这些语句使用不当的话&#xff0c;就会不经意间导致整个数据库的压…...

第七章:ElasticSearch集群的搭建

上一章&#xff1a;《第六章&#xff1a;IK分词器和Elasticsearch集成使用》 文章目录7.1 集群节点7.2 集群的搭建7.2.1 windows环境下es集群的搭建1.准备三台elasticsearch服务器2.修改每台服务器的配置7.2.2 linux环境下搭建es集群7.3 集群测试7.4 springboot集成客户端使用7…...

《第一行代码》kotlin Android SQLite

参考 《第一行代码 第三版》教程 Android 内置了SQLite数据库 SQLite 是一款轻量级的关系型数据库&#xff0c;运算速度快&#xff0c;占用资源少&#xff0c;支持标准SQL语法&#xff0c;数据库ACID事务&#xff0c;可以用于记录复杂的关系性数据 创建数据库 Android提供了S…...

es-Mapping

文章目录es-Mapping概念查看mappingES数据类型两种映射类型映射参数es-Mapping 概念&#xff1a;映射是定义文档及其包含的字段的存储和索引方式的过程两种映射方式 dynamic mapping&#xff08;动态映射或自动映射&#xff09;expllcit mapping &#xff08;静态映射或手动映…...

Spring事物管理

一.事物的概念? 事物可以看做是由对数据库的若干操作组成的一个单元 事物是一系列的动作,一旦其中有一个动作出现错误,必须全部回滚,提供将事物中对数据库的所有已完成的操作全部撤销,滚回到事物开始的状态,避免出现由于数据不一致而导致接下来的一系列错误. 事物的出现是为…...

九龙证券|重金买入百余股,这类资金连增六日!这个行业被重点盯上

两融资金接连6个交易日添加&#xff0c;杠杆资金加仓哪些股票&#xff1f; 证券时报•数据宝计算&#xff0c;到2月6日&#xff0c;沪深两融余额为15577.13亿元&#xff0c;较上一交易日添加58.79亿元&#xff0c;其间融资余额14641.43亿元&#xff0c;较上一日添加60.38亿元。…...

Self-training 与 Self supervised learning 简明对比

前言 最近搜 self supervised learning 工作时&#xff0c;不知怎么就输成了 self-training 自己还没反应过来已经搜错了hhh&#xff0c;这篇文章简明对比一下。 正文 Self-training 想要详细了解的可以看一篇综述 https://arxiv.org/pdf/2202.12040.pdf Self-training 其…...

C语言——字符串+内存函数及其模拟实现

目录0. 思维导图1. 前言2. 函数介绍2.1 strlen2.2 strcpy2.3 strcat2.4 strcmp2.5 strncpy2.6 strncat2.7 strncmp2.8 strstr2.9 strtok2.10 strerror2.11 memcpy2.12 memmove2.13 memcmp2.14 memset3. 库函数模拟实现3.1 模拟实现strlen3.2 模拟实现strcpy3.3 模拟实现strcat3…...

网络流量回溯分析对业务系统慢访问分析案例

需求简介 某外高桥公司的OA系统是其重要的业务系统&#xff0c;OA系统负责人表示&#xff0c;部分用户反馈&#xff0c;访问OA系统时比较慢。需要通过分析系统看一下实际情况。 报告内容 本报告内容主要为&#xff1a;OA性能整体分析 分析时间 报告分析时间范围为&#xf…...

全志H616——通过语言来控制手机刷抖音

思路&#xff1a;配置语言模块硬件库&#xff08;说什么话之类的&#xff09;刷固件到语言模块上&#xff08;USB转TTL&#xff09;连接安卓手机&#xff0c;使其能处于USB调试状态测试shell指令&#xff08;abd shell指令&#xff09;编写并封装串口收发函数&#xff08;下一篇…...

NVIDIA GPU开源驱动编译学习架构分析

2022年5月&#xff0c;社区终于等到了这一天&#xff0c;NVIDIA开源了他们的LINUX GPU 内核驱动&#xff0c; Linux 内核总设计师 Linus Torvalds 十年前说过的一句话&#xff0c;大概意思是英伟达是LINUX开发者遇到的硬件厂商中最麻烦的一个&#xff0c;说完这句话之后&#x…...

C语言基础知识(61)

多维数组多维数组的定义格式是&#xff1a;数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n];定义了一个名称为num&#xff0c;数据类型为int的二维数组。其中第一个[3]表示第一维下标的长度&#xff0c;就像购物时分类存放的购物&#xff1b;第二个[3]表示第二维下…...

MCU - C51 单片机「实例」

前言 本文主要讲述 C51 单片机 学习需要掌握的基础内容纲领「实例代码地址」 订阅专栏&#xff0c;后续会陆续更新每章节内容 文章目录前言概览1. Hello Wriprin2. 创建工程文件 (.c) .hex 调试3. I/O 口控制小灯任意位置任意数量4. 数码管显示5. 外部中断 int0 int16. 定时器…...

训练营打卡Day58

训练营打卡Day58 文章目录训练营打卡Day58题124&#xff1a;[392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)思路代码题125&#xff1a;[115. 不同的子序列](https://leetcode.cn/problems/distinct-subsequences/https://leetcode.cn/problems/distinct-sub…...

ansible实战应用系列教程5:管理playbook

ansbile实战应用系列教程5:管理playbook 编写并运行playbookAnsible Playbooks and Ad Hoc CommandsFormat of an Ansible Playbook运行playbook选项optionsplaybook中编写多个playsWriting Multiple PlaysRemote Users and Privilege Escalation in Playsplaybook提权配置文件…...

PostgreSQL中offset...limit分页优化常见手段

大部分开发人员习惯使用order by offset limit进行分页&#xff0c;使用该方法可能会导致扫描的数据放大&#xff0c;因为offset的行会被扫描。表现就是一般offset的行比较小的情况也&#xff0c;也就是翻页&#xff0c;是很快的&#xff0c;但是一旦offset的值很大&#xff0c…...

vue2 vue3 打包单文件组件为独立的js文件,动态加载组件,异步加载组件

1.我被自己坑了(需求) 我想要的是 "异步加载组件",但是 根据以前的经验 搜索的关键字是"动态加载组件" "动态加载组件" 在vue中有另外的意思. 另外 "打包单文件组件为独立js" 这个关键字搜索到的内容也不是我想要. 我的需求就是 把…...

Android面试题 ---- 沉浸式状态栏适配

关于屏幕适配 ---- 状态栏 关于状态栏 这么多年了 适配主要也就是沉浸式 所以这篇文章主要是说一说沉浸式&#xff0c;还有一些相关的方法 沉浸式的实现方式 从4.4到今天&#xff0c;也有过很多次变更&#xff0c;这里我们只讲一些变动比较大的部分&#xff0c; 我们也一起都看…...

理解「业务」与「技术」概念

技术也好&#xff0c;业务也罢&#xff1b; 01【什么是业务&#xff1f;】 对于那些久经职场的人&#xff0c;也很难一句话说明白&#xff1b; 业务&#xff0c;作为工作中绝对的核心点&#xff0c;即便在一个公司待的足够久&#xff0c;对业务足够熟悉&#xff0c;也很难简单…...

ESP32 Arduino (九) EEPROM和NTP对时

EEPROM一、简介EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息&#xff0c;重新编程。一般用在即插即用。在EPS32中已经将EEPROM弃用。对于ESP…...

sqlsugar 多租户设置AOP

最近为了整合公司项目中间件API的开发&#xff0c;耗费了不少人力&#xff0c;其中涉及到多个且不同类型的数据库&#xff08;不知道之前的项目立案&#xff0c;数据库到底是怎么设计&#xff0c;整的我写一些业务逻辑得写好几套代码&#xff0c;简直不要太恶心&#xff09; 因…...

Redis三 高级篇-1. 分布式缓存

分布式缓存 《Redis三 高级篇-1. 分布式缓存》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis三 高级篇-1. 分布式缓存》分布式缓存《Redis三 高级篇-1. 分布式缓存》1.Redis持久化1.1.RDB持久化1.1.1.执行时机1.1.2.RDB原理1.1.3.小结1.2.AOF持…...