【微信小程序高频面试题——精选一】

news2025/1/16 20:20:45

微信小程序高频面试题

  • 小程序中如何进行接口请求?会不会跨域,为什么
  • 小程序的常用命令有哪些
  • 你认为微信小程序的优点是什么,缺点是什么
  • 微信小程序中的js和浏览器中的js以及node中的js的区别
  • 微信小程序中的数据渲染浏览器中有什么不同
  • 小程序中如何渲染数据
  • 简述一下微信小程序中通讯模型
  • 谈谈对微信小程序中生命周期函数的理解
  • 微信小程序中如何进行事件的定义,传参
  • wxss和css有什么区别
  • 小程序如何进行页面的跳转传参以及接收数据
  • 小程序如何进行本地存储?
  • 谈谈你对微信小程序请求封装的理解
  • 小程序如何实现数据驱动视图
  • 为什么微信小程序会出现登录鉴权的问题, 如何解决
  • 对小程序中常见的开放能力API有什么了解
  • 小程序的父子传参和vue中的有什么区别
  • 谈谈你对behavior的理解
  • 如何优化首次加载小程序的速度
  • 微信小程序如何实现瀑布流效果?

简介: uni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可以发布到IOS、Android、Web(响应式)、以及各种小程序、快应用等多个平台。
uniapp真正做到一套代码多端发行,支持原生代码混写和原生sdk集成。
运行体验更好。组件、api与微信小程序一致,兼容 Weex 原生渲染。
通用技术栈,学习成本更低。Vue的语法,微信小程序的api,对于前端开发人员来说更容易上手。
开放生态,组件更丰富。支持通过npm安装第三方包;支持微信小程序自定义组件及sdk;兼容 mpvue 组件及项目;app端支持与原生混合编码;

小程序中如何进行接口请求?会不会跨域,为什么

微信小程序有自带的api接口,wx.request();
不会跨域
跨域问题的出现是因为浏览器在进行请求时存在同源策略, 但是微信小程序不受同源策略的影响.所以不存在跨域问题

    wx.request({
 
      url: 'https://showme.myhope365.com/api/cms/article/open/list',
 
      method: "POST",
 
      data: {
 
        pageNum: 1,
 
        pageSize: 10
 
      },
 
      header: {
 
        "content-type": "application/x-www-form-urlencoded"
 
      },
 
      success: res => {
 
        console.log(res.data.rows)
 
      }
 
})

wx.request——参数说明

url 开发者服务器接口地址。注意这里需要配置域名
data 请求的参数
header 设置请求的 header,header 中不能设置 Referer,默认header[‘content-type’] = ‘application/json’
method(需大写)有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
dataType json 回包的内容格式,如果设为json,会尝试对返回的数据做一次 JSON解析
success 收到开发者服务成功返回的回调函数。
fail 接口调用失败的回调函数
complete 接口调用结束的回调函数(调用成功、失败都会执行)

小程序的常用命令有哪些

  1. 引用数据
    {{}} 小程序中任何需要获取数据的地方都需要用{{}},包括标签内的属性
    WXML 提供两种文件引用方式import和include。
    import 需要注意的是 import 有作用域的概念,即只会 import 目标文件中定义的 template,而不会 import 目标文件中 import 的 template,简言之就是 import 不具有递归的特性。
    include,可以将目标文件中除了 外的整个代码引入,相当于是拷贝到 include 位置。
  1. 逻辑渲染 wx:if wx:elif wx:else hidden
    hidden 条件渲染
    wx:if在不满足条件的时候会删除掉对应的DOM
    hidden属性则是通过display属性设置为none来进行条件渲染
  1. 列表渲染 wx:for wx:for-item wx:for-index wx:key,使用 wx:for-item 指定数组当前元素的变量名,使用 wx:for-index 指定数组当前下标的变量名。
    wx:key 的值以两种形式提供:
    字符串,代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。
    保留关键字 this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字。

当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组件保持自身的状态,并且提高列表渲染时的效率。

<view wx:for="{{array}}" wx:for-index="index" wx:for-item="itemName.id">{{index.cra}}</view>
  1. 驱动视图 this.setData({})
  2. 事件绑定 bind

你认为微信小程序的优点是什么,缺点是什么

优势

  1. 微信助理,容易推广。 在微信中,小程序拥有众多入口,例如附近的小程序、小程序码、分享、发现-小程序等五十多个的入口。这些入口有助于企业更好的获取流量,从而进行转化、变现。
  2. 使用便捷。 用户在使用小程序时,只需要轻轻点一下就可以使用,更加符合用户对使用方便、快捷的需求,所以小程序的用户数量不断增加。
  3. 体验良好,有接近原生app的体验 。 在微信生态里,小程序在功能和体验上是可以秒杀掉 H5 页面的,H5 页面经常出现卡顿、延时、加载慢、权限不足等原因,而这些问题在小程序里都不会出现。
  4. 成本更低。 从开发成本到运营推广成本,小程序的花费仅为APP的十分之一,无论是对创业者还是传统商家来说都是一大优势。

不足

  1. 单个包大小限制为2M。 这导致无法开发大型的应用,采用分包最大是20M(这个值一直在变化,以官网为准)。
  2. 发布审核麻烦。 需要像app一样审核上架,这点相对于H5的发布要麻烦一些。
  3. 处处受微信限制。 例如不能直接分享到朋友圈,涉及到积分,或者虚拟交易的时候,小程序也是不允许的

微信小程序中的js和浏览器中的js以及node中的js的区别

直观的说小程序中没有DOM和BOM对象,也无法对npm包进行管理

浏览器中JS

  • ES
  • DOM
  • BOM

Node中的JS

  • ES
  • NPM
  • Native

NPM 是包管理系统、NPM是目前最大的开原库生态系统,通过各种NPM扩展包快速的实践一些功能。
Native 就是原生的模块,通过这个模块来使用JavaScript语言本身不具有的一些能力(native方法简单的讲,即Java调用非Java代码的接口)。

在这里插入图片描述

小程序中的JS

  • ES
  • 小程序框架
  • 小程序API

在这里插入图片描述

微信小程序中的数据渲染浏览器中有什么不同

浏览器中渲染是单线程的;

而在小程序中的运行环境分成渲染层和逻辑层, WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层。

小程序中如何渲染数据

  1. WXML模板使用 view 标签,其子节点用 {{ }} 的语法绑定一个 msg 的变量。

  2. 在 JS 脚本使用 this.setData 方法把 msg 字段设置成 “Hello World”。

简述一下微信小程序中通讯模型

小程序的渲染层和逻辑层分别由2个线程管理:

  1. 渲染层的界面使用了WebView 进行渲染;

  2. 逻辑层采用JsCore线程运行JS脚本。

一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端(Native)做中转。
逻辑层发送网络请求也经由Native转发。

在这里插入图片描述

谈谈对微信小程序中生命周期函数的理解

小程序中的生命周期函数,分为 应用生命周期函数页面生命周期函数
在这里插入图片描述
应用生命周期函数

onLaunch 函数的参数也可以使用 wx.getLaunchOptionsSync 获取;
onShow 也可以使用 wx.onAppShow 绑定监听;
onHide 也可以使用 wx.onAppHide 绑定监听;

App.js是小程序入口文件,所以在App.js中调用应用生命周期函数:
微信小程序官网

App({
  onLaunch: function () {
  // 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
  },
  onShow: function (options) {
  // 当小程序启动,或从后台进入前台显示,会触发 onShow 
  },

  onHide: function () {
  // 当小程序从前台进入后台,会触发 onHide
  },
  onError: function (msg) {
  // 当小程序发生脚本错误,或者 api 调用失败时,会触发 onError 并带上错误信息
  }
})

页面生命周期函数有:
微信小程序官网

在这里插入图片描述

还有一些特殊的生命周期,它们并非与组件有很强的关联,但有时组件需要获知,以便组件内部处理。这样的生命周期称为“组件所在页面的生命周期”,在 pageLifetimes 定义段中定义。其中可用的生命周期包括:

生命周期参数描述
show组件所在的页面被展示时执行
hide组件所在的页面被隐藏时执行
resizeObject Size组件所在的页面尺寸变化时执行

微信小程序中如何进行事件的定义,传参

  1. 事件定义 bind开头
    在小程序中绑定事件可以以bind开头然后跟上事件的类型,如bindtap绑定一个点击事件,对应的值是一个字符串,需要在page构造器中定义同名函数,每次触发事件之后就会执行对应函数的内容。

  2. 阻止事件冒泡 catch开头
    在小程序中除了通过bind之外,还可以通过catch进行事件绑定,通过catch绑定的事件不会触发事件冒泡。

  3. 事件捕获 capture-bind开头
    事件的触发分为两个阶段,首先是捕获阶段,其次是冒泡阶段。默认情况下事件都是在冒泡阶段触发。如果希望事件可以在捕获阶段触发,可以通过capture-bind进行事件绑定。

  4. 事件传参 data-
    在小程序中进行事件传参不能像传统的Web项目中一样,在括号里写参数。在小程序中需要在标签上通过data-方式定义事件所需的参数。

关于事件对象其他属性

type 事件类型
timeStamp 页面打开到触发事件所经过的毫秒数
target 触发事件的组件的一些属性值集合
currentTarget 当前组件的一些属性值集合
detail 额外的信息
touches 触摸事件,当前停留在屏幕中的触摸点信息的数组
changedTouches 触摸事件,当前变化的触摸点信息的数组

这里需要注意的是target和currentTarget的区别,currentTarget为当前事件所绑定的组件,而target则是触发该事件的源头组件。

<!-- data-参数名=’参数值’ -->
 
<view bindtap="handleTap" data-msg="我是事件的参数">点击事件</view>
 
       每个事件回调触发时,都会收到一个事件对象,通过这个对象可以获取路由传递的参数。
 
handleTap(e){
	console.log("执行了点击事件");
	// 通过currentTarget中的dataset属性可以获取时间参数
    console.log(e.currentTarget.dataset.msg);//我是事件的参数
}

wxss和css有什么区别

WXSS和CSS类似,不过在CSS的基础上做了一些补充和修改。

  1. 单位 1rpx(Rpx) = (屏幕宽度/750)px
    在WXSS中,引入了rpx尺寸单位。引用新尺寸单位的目的是,适配不同宽度的屏幕,开发起来更简单。
    在小程序中,规定所有手机的屏幕宽度都是750rpx,所以在不同尺寸的屏幕下1rpx的宽度都不同。
    在iphone6手机下,屏幕宽度是375px,所以1rpx=0.5px。
    wxss尺寸单位rpx的引入,来提升不同屏幕的适配体验,750rpx = 375px;
  2. 提供了全局的样式和局部样式
    项目根目录中的 app.wxss 会作用于所有小程序页面
    局部页面的 .wxss 样式仅对当前页面生效
    • wxss仅支持部分css选择器:
      • .class和#id
      • element
      • 并集选择器 后代选择器
      • ::after ::before等伪类选择器
  3. 外联样式导入不同,wxss 使用@import标识符来导入外联样式。

小程序如何进行页面的跳转传参以及接收数据

最常用的两个页面的跳转和传参方式:1.wx.navigateTo 2.navigator标签

保留当前页面,只能打开非 tabBar 页面。

<navigator url="/page/navigate/navigate?title=navigate" hover-class="navigator-hover">跳转到新页面</navigator>

wx.navigateTo({
     url: `/pages/details?id=${xxx}`
});

其他方式:

  • wx.switchTab() 不能进行页面传参
    用来 跳转至tabBar页面,并关闭其他所有非 tabBar 页面

  • wx.redirectTo() 关闭卸载当前页面,只能打开非 tabBar 页面。

  • wx.navigateTo() 一样,都 跳转至非tabBar页面,但会关闭当前页面

  • wx.reLaunch() 关闭卸载所有页面,可以打开任意页面。

  • wx.navigateBack() 用来返回上一页面或多级页面,并关闭当前页面。
    返回前面的页面,可以指定返回多少页,如果用过redirectTo,那么被关闭的页面将不能返回

wx.navigateBack({
 
  delta: 2  //返回的页面数,如果 delta 大于现有页面数,则返回到首页。
 
})

接收参数
路由跳转传参可以通过?的方式拼接参数。跳转到指定界面之后,可以在该页面的onLoad方法中的options参数(本身是个对象)拿到路由跳转的参数。

小程序如何进行本地存储?

小程序提供了读写本地数据缓存的接口,通过wx.setStorage写数据到缓存,在小程序中几乎所有接口都是异步的,这里存储数据也是一个异步操作,如果希望进行同步存储需要调用wx.setStorageSync。

异步存储👲

    wx.setStorage({
 
      data: {name:"天亮教育",age:4},
        //需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。
 
      key: 'list',//本地缓存中指定的 key
 
})

同步存储👲

wx.setStorageSync('list1', {name:"尚云科技",age:5})

同步读取

const list = wx.getStorageSync('list')

缓存的限制和隔离

  • 小程序宿主环境会管理不同小程序的数据缓存,不同小程序的本地缓存空间是分开的,每个小程序的缓存空间上限为10MB,如果当前缓存已经达到10MB,再通过wx.setStorage写入缓存会触发fail回调。
  • 小程序的本地缓存不仅仅通过小程序这个维度来隔离空间,考虑到同一个设备可以登录不同微信用户,宿主环境还对不同用户的缓存进行了隔离,避免用户间的数据隐私泄露。
  • 由于本地缓存是存放在当前设备,用户换设备之后无法从另一个设备读取到当前设备数据,因此用户的关键信息不建议只存在本地缓存,应该把数据放到服务器端进行持久化存储。

谈谈你对微信小程序请求封装的理解

封装前

wx.request({
  url: 'xxx',
  data: {
    a: '',
    b: ''
  },
  header: {
    'content-type': 'application/json' // 默认值
  },
  success(res) {
    console.log(res.data)
  },
  fail(err){
    console.log(err)  
  }
})

封装后

const baseUrl = "123456.com"
function request(method, url, dataObj) {
    return new Promise(function(resolve, reject) {
        let header = {
            'content-type': 'application/json',
        };
        wx.request({
            url: baseURL + url,
            method: method,
            data: dataObj.data,
            header: dataObj.header||header,
            success(res) {
                //请求成功
                if (res.code == 0) {
                    resolve(res);
                } else {
                    //其他异常
                    reject('运行时错误,请稍后再试');
                }
            },
            fail(err) {
                //请求失败
                reject(err)
            }
        })
    })
}

(上面的方法)由于每个页面单独请求效率低下且不便于维护,所以需要封装 wx.request 接口。
通常以返回 promise 对象的形式进行请求的封装:
下面的时候封装后的,可以直接通过 .then() 方法使用

封装的优点

  1. 提高代码的复用性
  2. 提高代码安全性
  3. 便于修改增加可维护性
  4. 简化外部调用,便于开发
  5. 符合高内聚低耦合特性
  6. 代码美观

作用:

  1. 添加统一的请求配置
  2. 可以添加请求拦截器和响应拦截器,在请求和响应之前加一些通用的处理。

小程序如何实现数据驱动视图

在JS文件中的data中动态操控数据:使用 this.setData方法修改视图层data中的数据;

在wxml文件通过{{}}将数据绑定,即可在页面中显示

注意:

  • 直接修改this.data,而不调用this.setData(),是无法改变当前页面的状态,会导致数据不一致
    仅支持可以JSON化的数据
  • 单次设置的数据不能超过1024KB,尽量避免一次设置过多的数据
  • 不要把data中的任何一项的value设为undefined,否则这一项将不能被设置,可能会有潜在的问题
<!-- page.wxml -->
 
<view>{{text}}</view>
 
// page.js
 
Page({
 
  data: {
    text: '天黑教育',
  },
 
onLoad(){
 
      console.log(this.data.text)//天黑教育
      this.setDatta.text = '50'
      console.log(this.data.text)//50

 
}
 
})

为什么微信小程序会出现登录鉴权的问题, 如何解决

原因

通常后端采用的登录鉴权方式是通过cookie的方式进行的鉴权,即登录成功之后,后端会给我们cookie上增加一个JSESSIONID,这个JESSIONID就标识了当前登录用户的身份。

在浏览器中,我们每次发送请求都会携带cookie,所以说在浏览器中我们登录成功之后就可以直接调用登录之后才能访问的接口。但是在小程序端,小程序默认不会帮我们在发送请求的时候带上cookie,这个时候就需要我们手动添加请求cookie了。

解决方法

    1. 在登录成功之后,我们获取到后台返回的cookie中的JESSIONID并进行记录。

    2. 在每次发送请求的时候,在请求头中添加上cookie属性。
function request(options) {
 
  // 请求拦截器
 
  //  ...
 
  // 1. 加一些统一的参数,或者配置
 
  if (!options.url.startsWith("https://") && !options.url.startsWith("http://")) {
	 //地址仅供参考
    options.url = "https://showme.myhope365.com" + options.url
 
  }
 
  // 默认的请求头
 
  let header = {
 // 默认的格式
"content-type": "application/x-www-form-urlencoded",
 
// 加上统一的cookie
 
"cookie": wx.getStorageSync("cookie") || ""
 
  };
 
  if (options.header) {
 
    header = {
 
      ...header,
 
      ...options.header
 
    }
 
  }
 
 
 
  return new Promise((reslove, reject) => {
 
    // 调用接口
 
    wx.request({
 
      // 默认的配置
 
      // 加载传入的配置
 
      ...options,
 
      header,
 
      success(res) {
 
        // 响应拦截器,所有接口获取数据之前,都会先执行这里
 
        //  1. 统一的错误处理
 
        if (res.statusCode != 200) {
 
          wx.showToast({
 
            title: '服务器异常,请联系管理员',
 
          })
 
        }
 
 
 
        reslove(res)
 
      },
 
      fail(err) {
 
        reject(err)
 
      }
 
    })
 
  })
 
}

对小程序中常见的开放能力API有什么了解

获取网络状态(2G/3G/4G/5G/WIFI…)

Page({
  // 点击“预览文档”的按钮,触发tap回调
  tap: function() {
    wx.getNetworkType({
      success: function(res) {
        // networkType字段的有效值:
        // wifi/2g/3g/4g/5g/unknown(Android下不常见的网络类型)/none(无网络)
        if (res.networkType == 'wifi') {
          // 从网络上下载文档
          wx.downloadFile({
            url:' https://lark-temp.oss-cn-hangzhou.aliyuncs.com/__temp/464110/docx/bb5d8e7d-97bc-406b-be94-ca2b4724c0e6.docx?OSSAccessKeyId=LTAI4GKnqTWmz2X8mzA1Sjbv&Expires=1644944885&Signature=qUYOtNWZOaopjkEFbcKpvgmn%2B1U%3D',
            success: function (res) {
              // 下载成功之后进行预览文档
              wx.openDocument({
                filePath: res.tempFilePath            
				})
            }
          })
        } else {
          wx.showToast({ title: '当前为非Wifi环境' })
        }
      }
    })
  }
})

扫码能力

Page({
  // 点击“扫码订餐”的按钮,触发tapScan回调
  tapScan: function() {
    // 调用wx.login获取微信登录凭证
    wx.scanCode({
      success: function(res) {
        var num = res.result // 获取到的num就是餐桌的编号
      }
    })
  }
})

分享能力(分享朋友圈-聊天页面)

Page({  
onShareAppMessage(){    
    // 我们要记录转发的记录    
    return {      
    // 分享的标题     
     title:'网友热议',      
    // 分享的封面, 默认为当前页面的截图      
    imageUrl:"/assets/icon/index.png",      
    // 点击分享跳转的路径,默认是当前路径,也可以自定义配置,添加额外的跳转参数      path:"/pages/index/index?userId=10&entry=share"
    }
},  // 省略了别的属性  ...}) 

wx.canIUse(string schema)
判断小程序的API、回调、参数、组件等是否在当前版本可用

wx.getSystemInfoSync() | wx.getSystemInfo()
获取系统信息

wx.getUserProfile(Object object)
获取用户信息。页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 userInfo。该接口用于替换 wx.getUserInfo

小程序的父子传参和vue中的有什么区别

区别
父传子 properties接收
子传父 triggerEvent方法

父传子的不同点是:微信小程序在子组件中接受父组件传 用 propertites 进行接收,而不是 props

  properties: {
     msg:{
      // type 要接收的数据的类型
      type:String,
      // value 默认值
      value:""
    },
  },

子传父的不同点是:微信小程序在子组件中使用 triggerEvent 抛出自定义事件名,而不是 this.$emit()

 methods: {
    sendData() {
      console.log(this.data.msg)
      this.triggerEvent('eventName', '要传递的参数')
    }
  }

谈谈你对behavior的理解

behaviors 是用于组件间代码共享的特性,类似于一些编程语言中的 mixins 或 traits。

每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。 每个组件可以引用多个 behavior ,behavior 也可以引用其它 behavior 。

组件引用时,在 behaviors 定义段中将它们逐个列出即可。

// my-component.js
var myBehavior = require('my-behavior')
Component({
  behaviors: [myBehavior],
  properties: {
    myProperty: {
      type: String
    }
  },
  data: {
    myData: 'my-component-data'
  },
  created: function () {
    console.log('[my-component] created')
  },
  attached: function () { 
    console.log('[my-component] attached')
  },
  ready: function () {
    console.log('[my-component] ready')
  },
  methods: {
    myMethod: function () {
      console.log('[my-component] log by myMethod')
    },
  }
})

如何优化首次加载小程序的速度

包体积优化

  • 分包加载(优先采用,大幅降低主包体积)。

  • 图片优化(1.使用tinypng压缩图片素材; 2.服务器端支持,可采用webp格式)。

  • 组件化开发(易维护)。

  • 减少文件个数及冗余数据。

请求优化

  • 关键数据尽早请求(onLoad()阶段请求,次要数据可以通过事件触发再请求);整合请求数据,降低请求次数。
  • 采用cdn缓存静态的接口数据(如判断用户登录状态,未登录则请求缓存接口数据),cdn稳定且就近访问速度快(针对加载总时长波动大)。
  • 缓存请求的接口数据。

首次渲染优化

  • 图片懒加载(节省带宽)。
  • setData优化(不要一次性设置过多的数据等)。
  • DOM渲染优化(减少DOM节点)

微信小程序如何实现瀑布流效果?

思路:把屏幕分为左右两个容器,根据容器的高度决定下一个元素应该放在哪个容器内(高度相对较低的容器)。

  // 处理数据
  initList(list) {
    this.data.finish = false
    // 临界值
    if (list.length == 0) {
      this.data.finish = true
      return
    }
    let item = list.shift()
    wx.getImageInfo({
      src: item.coverImgUrl,
      success: (res) => {
        if (this.data.leftHeight <= this.data.rightHeight) {
          // 默认从左往右渲
          this.data.leftList.push(item)
          this.data.leftHeight += res.height / res.width
        } else {
          this.data.rightList.push(item)
          this.data.rightHeight += res.height / res.width
        }
        this.setData({
          leftList: this.data.leftList,
          rightList: this.data.rightList,
        })
      },
      complete: () => {
        this.initList(list)
      }
    })

I guess it comes down to a simple choice: get busy living or get busy dying.
该做个简单的选择了:要么忙着活,要么忙着死。

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

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

相关文章

全国所有地级市环境污染、企业、公路、固定资产、外商投资-最新面板数据

一、1990&#xff0d;2019年地级市面板数据 1、数据来源&#xff1a;中国城市统计年鉴、WIND数据库 2、时间跨度&#xff1a;2000-2019 3、区域范围&#xff1a;所有地级市 4、指标说明&#xff1a; 该份部分数据指标如下&#xff1a; 主营业务税金及附加(万元) 发明专利…

android-CHECK_xxx分析

android-CHECK_xxx 在android源码中有不少类似这样的用法&#xff0c;上图中就是检查获得的hal版本是否大于等于版本1_3&#xff0c;满足继续往下走&#xff0c;不满足则assert&#xff0c;并报错。 接下来就展开看看CHECK_xx家族&#xff1a; 用法 类型用法含义CHECK_EQ(val…

【SpringCloud】07 流量管理sentinel

sentinel Sentinel 是面向分布式服务架构的高可用流量防护组件&#xff0c;主要以流量为切入点&#xff0c;从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 1. 微服务中的服务雪崩 服务雪崩效应是一种因“服务提供者的不可…

Springboot系列(二十二):如何纯文本转成.csv格式文件?|超级详细,建议收藏

一、前言&#x1f525; 不知道大家有咩有遇到这么个需求&#xff0c;给你一长串文本&#xff0c;要求你能导成excel格式展示数据&#xff0c;一时间我陷入了沉思&#xff0c;如果要常规转excel&#xff0c;最明显的一点就是固定表头名&#xff0c;然而并不是&#xff0c;这表头…

[附源码]计算机毕业设计springboot冬奥资讯系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【DL with Pytorch】第 2 章 : 神经网络的构建块

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

第一个Shader Graph

上篇我们用ShaderLab来实现了第一个Shader,但对于初学者也太复杂了,那有没有简单的方式来实现shader的操作呢? 现在我们来分享下ShaderGraph,可视化编程,如图所示 ShaderGraph介绍 ShaderGraph是2018年推出的,可以看下官网出的例子https://github.com/UnityTechnologi…

[Linux] 进程程序替换之实现一个简单的shell

进程程序替换替换原理替换函数实现一个简单的shell主要过程实现代码替换原理 用fork创建子进程后执行的是和父进程相同的程序&#xff0c;若要执行不同的代码分支&#xff0c;子进程往往要调用一种exec函数以执行另一个程序&#xff1b;当进程调用一种exec函数时&#xff0c;该…

信息论与编码:随参信道特性

文章目录随参信道数学模型的建立随参信道对信号传输的影响平坦性衰落及频率选择性衰落1.平坦性衰落Rayleigh 分布Rice 分布2.频率选择性衰落多径随参信道的时延扩展与相干带宽随参信道的多径时延特性多径信道的频域特性移动信道的多普勒扩展及相干时间1.多普勒扩展2.信道的相干…

nodejs大前端从入门到精通一

一、nodejs架构 nodejs核心组成Natives Modules 当前层内容由JS实现提供应用程序可直接调用库&#xff0c;例如fs、path、http等JS语文无法直接操作底层硬件设置 在和硬件交互的的桥梁&#xff0c;通过Builtin Modules(胶水层) 底层&#xff1a; V8&#xff1a;执行JS代码&…

Android——Theme和Style-由浅入深,全面讲解

1、官方详细解读 样式和主题背景 | Android 开发者 | Android Developers 2、应用场景 类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。 样式style &#xff1a;应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性 主题theme&…

【仿牛客网笔记】项目发布与总结——单元测试、项目监控

在项目上线之前需做好单元测试&#xff0c;平时开发的过程中&#xff0c;每个功能也需要进行单元测试。 验证注解的作用&#xff0c;注解是修饰方法的。 每次调方法都是静态的 对test1和test2分别进行运行 通过类进行运行&#xff0c;运行所有的方法 测试帖子的Service&#x…

【序列召回推荐】(task5)多兴趣召回Comirec-DR

note&#xff1a; 多兴趣召回建模。Comirec论文中的提出的第一个模型&#xff1a;Comirec-DR&#xff08;DR就是dynamic routing&#xff09;&#xff0c;阿里将用户行为序列的item embeddings作为初始的capsule&#xff0c;然后提取出多个兴趣capsules&#xff0c;即为用户的…

【Java】博客系统——详细解释+代码+详细注释(课设必过)

目录 前言 博客系统简要分析 一、数据库的设计 1.1 分析 1.2 代码实现&#xff08;创建数据库和表&#xff09; 二、封装数据库&#xff08;JDBC代码的编写&#xff09; 2.1、首先通过创建Maven项目&#xff0c;基于Small Tomcat部署 servlet&#xff1b; 2.2、封装数据…

telnet配置设备远程管理—eNSP

案例&#xff1a;给路由器配置远程管理&#xff0c;使一台路由器远程管理另一台。 所需设备&#xff1a;两台路由器&#xff0c;一根网线 图示 一、给两台设备配置IP地址 AR1&#xff08;以下命令&#xff09; a. sy b. int g0/0/0 c. ip add 1.1.1.1 24AR2 a. sy b. int g0/0…

区间信息维护与查询【线段树 】 - 原理1 线段树的基本操作

区间信息维护与查询【线段树 】 - 原理1 线段树的基本操作 线段树&#xff08;segment tree&#xff09;是一种基于分治思想的二叉树&#xff0c;它的每个节点都对应一个[L , R ]区间&#xff0c;叶子节点对应的区间L R 。每一个非叶子节点[L , R ]其左子节点的区间都为[L , (…

进程与线程的区别及联系

目录 1. 操作系统功能简介 2. 进程 2.1 认识进程 2.2 进程操作系统中如何管理 2.3 PCB如何描述 2.3.1 pid 2.3.2 内存指针 2.3.3 文件描述符表 2.3.4 进程调度相关属性 3. 内存管理 4. 线程 4.1 认识线程 4.2 进程与线程的关系 4.3 线程安全问题 1.操作系统功能简…

[附源码]计算机毕业设计springboot电子相册管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Git 入门 拉取仓库和推送仓库

目录 基本操作 本地建立仓库并推送到远端仓库 关联仓库失败 解决方法 从远端仓库拉取文件到本地 私有的仓库的连接 修改 提交者名称 IDEA/Pycharm等如何使用git 如何关闭git 功能 Git操作主要分为两类 &#xff0c;如何把自己建的项目同步的网上的仓库&#xff0c;如何…

OpenHarmony编译系统

GN 简介 直接百度 GN 入门 可以参考下面的示例&#xff0c;作为入门参考学习https://blog.csdn.net/weixin_44701535/article/details/88355958https://gn.googlesource.com/gn//main/docs/reference.mdhttps://chromium.googlesource.com/chromium/src/tools/gn//48062805e…