09 2021 档案

摘要:一、问题 如果一个请求跨域了,这个请求会不会在服务端被执行? 这个问题看似简单,但是其实这一个问题就足以看出大家对跨域的理解,如果平时只是了解了个概念, 那这个问题大概率不会答的那么好。 二、解决思路 1、其实这个问题主要要从以下几个方面去考虑: (1)跨域究竟是谁的策略? (2)在什么时机会拦截请 阅读全文
posted @ 2021-09-30 21:57 古兰精 阅读(414) 评论(0) 推荐(0) 编辑
摘要:一、问题背景 为了防止信息泄露或知识产权被侵犯,在web的世界里,对于页面和图片等增加水印处理是十分有必要的,水印的添加根据环境可以分为两大类,前端浏览器环境添加和后端服务环境添加,根据实现方式又可以分为两大类,显性水印和数字水印。简单对比一下这两种方式的特点: 1、前端浏览器加水印: (1)减轻服 阅读全文
posted @ 2021-09-30 21:19 古兰精 阅读(2242) 评论(0) 推荐(0) 编辑
摘要:本篇文章不会更多侧重于具体技术实现,而是尝试从更高角度出发,分析为什么要这么做,这些设计能解决什么问题,成本和收益如何。 一、综合考量 1、核心思想 解决问题:前端架构的设计,应是用于解决已存在或者未来可能发生的技术问题,增加项目的可管理性、稳定性、可扩展性。 人效比:对于需要额外开发工作量的事务, 阅读全文
posted @ 2021-09-29 18:48 古兰精 阅读(681) 评论(0) 推荐(0) 编辑
摘要:看到这个问题,相信大家都觉得这个题目实在基础的不能再基础了。随手百度一下,就能看到很多人说:基本类型存在栈中,引用类型存在堆中。真的这么简单么? 如果js中基础类型是存在栈里的,那为什么默认栈区大小为984KiB的V8可以允许声明500MiB大小的字符串呢?如果基础类型也是存在堆里的,又是怎么gc的 阅读全文
posted @ 2021-09-29 13:47 古兰精 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:一、Map 和 WeakMap 有什么不同之处 1、Map 是为了解决对象中的 key 只能为字符串的缺陷 //基本的对象 const obj = { 'name': '张飞',, 'age': 18 } // Map let m = new Map() a.set(obj,1) 我们的 Map 是 阅读全文
posted @ 2021-09-29 11:26 古兰精 阅读(1290) 评论(1) 推荐(0) 编辑
摘要:这篇文章主要记录及介绍一下前端实现隐写术及相关知识,具体内容不细节展开,因为感觉工作中实用性不强,就是知道有这个东西,可以实现这些东西,以后如果需要使用的话,再细细研究学习,不过真的感觉不错,会玩,哈哈。 主要推荐下面这篇文章:《通过文本与图片的隐写来隐藏信息(非常有意思!)》- https://m 阅读全文
posted @ 2021-09-26 18:51 古兰精 阅读(908) 评论(0) 推荐(0) 编辑
摘要:一、CSRF 攻击 1、CSRF漏洞的发生 相比 XSS,CSRF 的名气似乎并不是那么大,很多人都认为CSRF“不那么有破坏性”。真的是这样吗?接下来有请小明出场 —— 小明的悲惨遭遇: 这一天,小明同学百无聊赖地刷着Gmail邮件。大部分都是没营养的通知、验证码、聊天记录之类。但有一封邮件引起了 阅读全文
posted @ 2021-09-26 17:35 古兰精 阅读(1625) 评论(0) 推荐(0) 编辑
摘要:一、HTTP 拦截器的设计与实现 1、拦截器简介 对于大多数 SPA 应用程序来说, 通常会使用 token 进行用户的身份认证。这就要求在认证通过后,我们需要在每个请求上都携带认证信息。针对这个需求,为了避免为每个请求单独处理,我们可以通过封装统一的 request 函数来为每个请求统一添加 to 阅读全文
posted @ 2021-09-26 15:23 古兰精 阅读(869) 评论(0) 推荐(0) 编辑
摘要:一、Pomise.all 的使用 Promise.all 可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被 reject 失败状态的值。代码示例如下: let p1 = new Promise(( 阅读全文
posted @ 2021-09-24 18:12 古兰精 阅读(3277) 评论(0) 推荐(0) 编辑
摘要:一、并发控制简介 在日常开发过程中,你可能会遇到并发控制的场景,比如控制请求并发数。那么在 JavaScript 中如何实现并发控制呢?在回答这个问题之前,我们来简单介绍一下并发控制。 假设有 6 个待办任务要执行,而我们希望限制同时执行的任务个数,即最多只有 2 个任务能同时执行。当 正在执行任务 阅读全文
posted @ 2021-09-24 17:17 古兰精 阅读(1074) 评论(0) 推荐(0) 编辑
摘要:一、需求背景 在数据库表里,一般都有主键,主键是不能重复的,因为是唯一标识。假设这个时候需求来了,需要插入一组数据,这些数据中有些是完全新的,可以直接插入(insert),但有些主键内容是和原本表内的数据主键内容是一致的,这些就无法直接插入了,而是执行更新(update)操作。这时候就比较麻烦了,因 阅读全文
posted @ 2021-09-24 15:06 古兰精 阅读(12642) 评论(0) 推荐(0) 编辑
摘要:俗话说得好,工欲善其事必先利其器。利用一些开源项目,我们将能轻松应对一些常见工作场景:文件上传、图片处理、文档处理、在线表格、表单设计器、H5 页面设计器。 1、文件上传 - uppy 24.6k uppy 是一个体验顺滑、模块化的 JavaScript 文件上传器,可以无缝地与任何应用程序集成。它 阅读全文
posted @ 2021-09-23 22:41 古兰精 阅读(1531) 评论(0) 推荐(0) 编辑
摘要:一般在我们工作中,主要会涉及到 9 种文件下载的场景,每一种场景背后都使用不同的技术,其中也有很多细节需要我们额外注意。 在浏览器端处理文件的时候,我们经常会用到 Blob 。比如图片本地预览、图片压缩、大文件分块上传及文件下载。在浏览器端文件下载的场景中,比如我们今天要讲到的 a 标签下载、sho 阅读全文
posted @ 2021-09-23 18:56 古兰精 阅读(2632) 评论(0) 推荐(0) 编辑
摘要:经常听说“不使用的对象应手动赋值为null”,但是要问原因,大都回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。所以这里做一点深入研究。 一、将对象赋值为null,对垃圾回收有用吗? 网上很多java性能优化里都会有这么一条:尽量把不使用的对象显式得置为null,这样有助于 阅读全文
posted @ 2021-09-23 16:00 古兰精 阅读(1304) 评论(0) 推荐(1) 编辑
摘要:一、为什么需要 Stream —— 分库分表之后大数据需要合并,传统方式效率不理想 现在很多大数据量系统中都存在分表分库的情况。例如,电商系统中的订单表,常常使用用户ID的Hash值来实现分表分库,这样是为了减少单个表的数据量,优化用户查询订单的速度。但在后台管理员审核订单时,他们需要将各个数据源的 阅读全文
posted @ 2021-09-21 22:47 古兰精 阅读(319) 评论(0) 推荐(0) 编辑
摘要:一、Java 8 Stream 介绍 Java8 API 添加了一个新的抽象称为 流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream 这种风格将要处理的元素集合看作一种 阅读全文
posted @ 2021-09-21 21:55 古兰精 阅读(960) 评论(0) 推荐(1) 编辑
摘要:Optional 是 Java 8 引进的一个新特性,通常用于缓解常见的空指针异常问题。Brian Goetz (Java语言设计架构师)对Optional设计意图的原话如下: Optional is intended to provide a limited mechanism for libra 阅读全文
posted @ 2021-09-19 23:00 古兰精 阅读(24896) 评论(1) 推荐(4) 编辑
摘要:一、Java8 之前时间存在的问题 Java 8 (又称为 jdk1.8) 是 Java 语言开发的一个主要版本,它支持函数式编程,新的日期 API,新的Stream API 等。Java 8通过发布新的 Date-Time API (JSR 310) 来进一步加强对日期与时间的处理。在旧版的 Ja 阅读全文
posted @ 2021-09-19 21:53 古兰精 阅读(405) 评论(0) 推荐(0) 编辑
摘要:一、方法引用 若Lambda体中的内容已经有方法实现过了,我们可以使用方法引用,使用方法引用的时候需要保证引用方法的参数列表和返回值类型与我们当前所要实现的函数式接口方法的参数列表和返回值类型保持一致。方法引用是Lambda表达式的另外一种表现形式。 主要有 3 种语法格式: (1)对象 :: 实例 阅读全文
posted @ 2021-09-18 19:03 古兰精 阅读(1860) 评论(0) 推荐(0) 编辑
摘要:HTTP 请求的头信息里面,Referer 是一个常见字段,提供访问来源的信息。很多开发者知道这个字段,但是说不清它的具体细节。本文详细介绍该字段。 一、Referer 的含义 现实生活中,购买服务或加入会员的时候,往往要求提供信息:"你从哪里知道了我们?",这叫做引荐人(referrer),谁引荐 阅读全文
posted @ 2021-09-18 13:59 古兰精 阅读(9055) 评论(0) 推荐(0) 编辑
摘要:在前面一篇文章中简单介绍了Lambda表达式,我们知道使用Lambda表达式是需要使用函数式接口的,那么岂不是在开发过程中需要定义许多函数式接口?当时我就有这个疑问,每次还需要自定义一个纯函数式接口,也挺烦的。 后来了解到其实不然,Java8 其实已经为我们定义好了4类内置函数式接口,这4类接口已经 阅读全文
posted @ 2021-09-18 13:20 古兰精 阅读(862) 评论(0) 推荐(0) 编辑
摘要:一、Lambda 表达式 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。 1、语法: (parameters) -> expression 阅读全文
posted @ 2021-09-17 21:46 古兰精 阅读(544) 评论(0) 推荐(0) 编辑
摘要:这是我们测试环境遇到的一个问题,详见这篇文章:docker 部署数据库并通过数据卷恢复数据 - https://www.modb.pro/db/109870 然后在网上找到一篇和我们的情况一样:https://www.jianshu.com/p/105855a8a6f7 一、问题背景 公司使用测试数 阅读全文
posted @ 2021-09-17 21:12 古兰精 阅读(3687) 评论(0) 推荐(0) 编辑
摘要:Javascript 中的数组是个强大的家伙:你可以创建的时候不规定长度,而是动态的去改变长度。你可以把他当成普通的数组去读取,也可以当他是堆栈来使用。你可以改变数组中每个元素的值甚至是类型。其实它是一个对象,比如我们可以这样去创建数组:var array = new Array(10); Java 阅读全文
posted @ 2021-09-17 16:44 古兰精 阅读(1371) 评论(0) 推荐(0) 编辑
摘要:一、Uint8Array 介绍 Uint8Array 数组类型表示一个8位无符号整型数组,创建时内容被初始化为0。创建完后,可以以对象的方式或使用数组下标索引的方式引用数组中的元素。 详细介绍见 MDN 描述:https://developer.mozilla.org/zh-CN/docs/Web/ 阅读全文
posted @ 2021-09-17 14:42 古兰精 阅读(28669) 评论(0) 推荐(1) 编辑
摘要:在日常工作中,文件上传是一个很常见的功能。在某些情况下,我们希望能限制文件上传的类型,比如限制只能上传 PNG 格式的图片。针对这个问题,我们会想到通过 input 元素的 accept 属性来限制上传的文件类型。这种方案虽然可以满足大多数场景,但如果用户把 JPEG 格式的图片后缀名更改为 .pn 阅读全文
posted @ 2021-09-17 12:27 古兰精 阅读(3705) 评论(0) 推荐(0) 编辑
摘要:一、canvas库-Fabric.js Fabric.js 是一个强大而简单的 Javascript HTML5 画布库。 Fabric 在画布元素之上提供交互式对象模型, Fabric 还具有 SVG-to-canvas(和 canvas-to-SVG)解析器。 详情见这篇文章:这个 19.4K 阅读全文
posted @ 2021-09-16 21:51 古兰精 阅读(774) 评论(0) 推荐(0) 编辑
摘要:前端监控的关键在于:(1)能够收集到用户信息;(2)能够将收集到的数据上报给服务器。 也就是说,只要能上报数据,无论是请求GIF文件,还是请求js文件或者是调用页面接口,服务器端其实并不关心具体的上报方式。向服务器端上报数据,可以通过请求接口,请求普通文件,或者请求图片资源的方式进行。为什么所有系统 阅读全文
posted @ 2021-09-16 18:55 古兰精 阅读(564) 评论(0) 推荐(0) 编辑
摘要:一、Array.prototype.reduce() reduce() 方法对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。 const array1 = [1, 2, 3, 4]; const reducer = (previousValue, c 阅读全文
posted @ 2021-09-16 11:49 古兰精 阅读(306) 评论(0) 推荐(0) 编辑
摘要:一、Array.from() Array.from() 方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。 1、语法:Array.from(arrayLike[, mapFn[, thisArg]]) arrayLike:必传参数,想要转换成数组的伪数组对象或可迭代对象。 mapFn:  阅读全文
posted @ 2021-09-15 19:01 古兰精 阅读(1161) 评论(0) 推荐(1) 编辑
摘要:很早之前写过一篇 FormData 对象方法的介绍,可以看这篇:HTML5 FormData 方法介绍以及实现文件上传:上传文件实例、FormData 对象方法介绍 一、FormData.append() FormData 接口的 append() 方法 会添加一个新值到 FormData 对象内的 阅读全文
posted @ 2021-09-15 15:17 古兰精 阅读(22182) 评论(0) 推荐(0) 编辑
摘要:在日常工作中,文件上传是一个很常见的功能。在项目开发过程中,我们通常都会使用一些成熟的上传组件来实现对应的功能。一般来说,成熟的上传组件不仅会提供漂亮 UI 或好的交互体验,而且还会提供多种不同的上传方式,以满足不同的场景需求。 一般在我们工作中,主要会涉及到 8 种文件上传的场景,每一种场景背后都 阅读全文
posted @ 2021-09-15 11:33 古兰精 阅读(7701) 评论(0) 推荐(2) 编辑
摘要:一、对象的创建过程 关于对象的创建,第一反应是 new 关键字。Student stu =new Student("**","18");就拿这句代码来说: 1、虚拟机首先会去检查Student这个类有没有被加载,如果没有,首先去加载这个类到方法区。 2、然后根据加载的Class类对象创建stu实例对 阅读全文
posted @ 2021-09-14 18:41 古兰精 阅读(88) 评论(0) 推荐(0) 编辑
摘要:一、JVM 堆溢出 在 jvm 运行 java 程序时,如果程序运行所需要的内存大于系统的堆最大内存(-Xmx),就会出现堆溢出问题。创建对象时如果没有可以分配的堆内存,JVM就会抛出OutOfMemoryError:java heap space异常。 // 执行该段代码需要大于10m内存空间 p 阅读全文
posted @ 2021-09-14 17:37 古兰精 阅读(3413) 评论(0) 推荐(2) 编辑
摘要:一、HTTP 请求的8种方法: HTTP/1.1协议中共定义了八种方法,来表明Request-URL指定的资源不同的操作方式。 HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 C 阅读全文
posted @ 2021-09-13 19:01 古兰精 阅读(1260) 评论(0) 推荐(0) 编辑
摘要:一、HttpServletRequest对象 HttpServletRequest对象:用来接收客户端发送过来的请求信息,例如:请求参数,发送的消息头信息等都属于客户端发来的信息。 1、常用方法:记几个常用的,其他需要用的时候 idea 会有提示 getRequestURL() :获取客户端发出请求 阅读全文
posted @ 2021-09-13 17:57 古兰精 阅读(818) 评论(0) 推荐(0) 编辑
摘要:一、什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。 像在mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护 阅读全文
posted @ 2021-09-10 18:35 古兰精 阅读(632) 评论(0) 推荐(0) 编辑
摘要:在面试中,大家应该经历过如下场景 面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键?" 你:"因为采用自增主键,数据在物理结构上是顺序存储,性能最好,blabla..." 面试官:"那自增主键达到最大值了,用完了怎么办?" 你:"wha 阅读全文
posted @ 2021-09-10 17:35 古兰精 阅读(559) 评论(0) 推荐(0) 编辑
摘要:分布式锁一般有三种实现方式:1、数据库乐观锁;2、基于Redis的分布式锁;3、基于ZooKeeper的分布式锁。 本篇博客将介绍第二种方式,基于Redis实现分布式锁,网上有很多错误的示例,所以在这里将详细介绍如何正确地实现Redis分布式锁。 一、可靠性 首先,为了确保分布式锁可用,我们至少要确 阅读全文
posted @ 2021-09-10 16:49 古兰精 阅读(285) 评论(0) 推荐(0) 编辑
摘要:在多线程环境下ArrayList是线程不安全的,所以需要使用线程安全的List,我第一时间使用的是Collections.synchronizedList(new Arraylist<>()),但是在实际使用过程中却发生了安全事件。 一、使用Collections.synchronizedList( 阅读全文
posted @ 2021-09-09 19:27 古兰精 阅读(631) 评论(0) 推荐(1) 编辑
摘要:一、Collections.synchronizedList 实现原理及如何做到线程安全 大家都知道ArrayList并不是线程安全的,如果想要做到线程安全,我们可以使用 Collections.synchronizedList, 但是使用 Collections.synchronizedList后 阅读全文
posted @ 2021-09-09 19:11 古兰精 阅读(2833) 评论(0) 推荐(0) 编辑
摘要:Redis 是一个开源的内存数据库,它以键值对的形式存储数据。由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis 也提供了持久化存储机制,将数据以某种形式保存在文件中,每次重启时,可以自动从文件加载数据到内存当中。 Redis 的架构包 阅读全文
posted @ 2021-09-09 18:17 古兰精 阅读(2647) 评论(0) 推荐(0) 编辑
摘要:在JDK的Collection中我们时常会看到类似于这样的话: 例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。 快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。 因此, 阅读全文
posted @ 2021-09-09 12:10 古兰精 阅读(306) 评论(0) 推荐(0) 编辑
摘要:一、项目实例问题背景 本身对 java 并不熟,听同事说的,所以研究了解一下这个问题,看了一下产生问题的代码长这样 // 筛选出users中email不在memberListAll的email的成员 for (WorkWxUserInfoVO workWxUserInfoVO : memberLis 阅读全文
posted @ 2021-09-08 22:29 古兰精 阅读(230) 评论(0) 推荐(0) 编辑
摘要:做技术一般有两种发展路线,一种是纯技术,一种是管理。这两种路线有什么不同呢?本文来尝试从不同的视角来解读下日常的工作,分能力、意愿、分工、协作、梯队、文化六个维度来看。 一、开发者视角 我们都是从开发者开始的,这个视角大家会比较熟悉。 1、能力 (1)入职以后,公司给我配备了导师,有什么不会的可以问 阅读全文
posted @ 2021-09-08 22:02 古兰精 阅读(189) 评论(0) 推荐(0) 编辑
摘要:一、uni-app小程序如何使用微信开发者工具预览和真机调试 1、首先回到HBuilder X的这个工程,找到manifest.json文件打开 2、 找到微信小程序 3、输入自己的小程序AppleID(这个自己注册小程序有的,没有的话自己去注册一个小程序)。 4、然后再次运行到小程序模拟器上就好了 阅读全文
posted @ 2021-09-08 19:18 古兰精 阅读(1605) 评论(0) 推荐(1) 编辑
摘要:一、什么是 hash Hash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。 在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进 阅读全文
posted @ 2021-09-08 18:41 古兰精 阅读(2514) 评论(0) 推荐(0) 编辑
摘要:一、什么情况下需要布隆过滤器? 1、先来看几个比较常见的例子: 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, gmail 等邮箱垃圾邮件过滤功能 这几个例子有一个共同的特点: 如何判断一个元素是否存 阅读全文
posted @ 2021-09-08 12:19 古兰精 阅读(887) 评论(0) 推荐(0) 编辑
摘要:一、为什么使用 redis 在项目中使用 redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用 redis。因此,这个问题主要从性能和并发两个角度去答。如下 阅读全文
posted @ 2021-09-07 22:02 古兰精 阅读(108) 评论(0) 推荐(0) 编辑
摘要:在大多数互联网应用中,缓存的使用方式如下: 1、当业务系统发起某一个查询请求时,首先判断缓存中是否有该数据; 2、如果缓存中存在,则直接返回数据; 3、如果缓存中不存在,则再查询数据库,然后返回数据。 了解了上述过程后,下面说说 redis 缓存三大问题及解决方案。 一、缓存穿透 关键词:穿过 Re 阅读全文
posted @ 2021-09-07 18:46 古兰精 阅读(514) 评论(0) 推荐(0) 编辑
摘要:一、命令介绍 1、git-reflog是用来恢复本地错误操作很重要的一个命令,可以叫做显示可引用的历史版本记录 可引用历史提交版本,什么意思?看下面区别 2、git reflog 与 git log 区别 (1)使用git log命令只可以查看到HEAD指针及其之前的版本信息,如果版本发生过回退操作 阅读全文
posted @ 2021-09-07 15:59 古兰精 阅读(1550) 评论(0) 推荐(0) 编辑
摘要:一、移动端自适应需求 1、痛点: 首先、不论转换是否方便,我就是不想在开发代码的时候换算这些单位,更不想去操心什么转换系数(根节点单位) 我会考虑某些属性或者类选择器不需要转换为REM、VW等,如果统一转换,这会不符合我的项目需求。 css代码要足够简洁,我只希望看到一种单位,那就是px。我不想在我 阅读全文
posted @ 2021-09-07 15:17 古兰精 阅读(8615) 评论(0) 推荐(0) 编辑
摘要:一、redis 简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 1、Redis 与其他 key - value 缓存产品有以下三个特点: (1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 (2)Red 阅读全文
posted @ 2021-09-06 18:18 古兰精 阅读(386) 评论(0) 推荐(0) 编辑
摘要:个性化推荐系统,设计的巧妙就可以立竿见影地提升运营效率和用户转化率,尤其在内容分发、电商、社交等领域实践相当出彩(微博、各新闻门户、头条、京东、探探等都取得了不错的成绩),个性化推荐已经成为一个产品的基础建设。 本文从整体上介绍一个完整的推荐系统所需的模块(不深入到细枝末节),核心包括内容源、内容处 阅读全文
posted @ 2021-09-06 13:26 古兰精 阅读(1231) 评论(0) 推荐(0) 编辑
摘要:vue3+typescript中引入外部文件有几种方法。 第一种方法 1、indext.html 中用script引入 <script src="https://oss-emcsprod-public.modb.pro/static/cropper.js"></script> 2、在.vue页面使用 阅读全文
posted @ 2021-09-05 21:29 古兰精 阅读(3305) 评论(0) 推荐(0) 编辑
摘要:一、问题描述 首先说一下,判断表里是否有记录,常见的写法(伪代码) -- 定义变量a a = (select count(*) from tb) if a > 0 ... else ... 这么写是没错,看上去也好理解,就是统计一下tb表中的记录数,然后判断这个记录数是否大于0。可能绝大多数人在实现 阅读全文
posted @ 2021-09-05 21:05 古兰精 阅读(1048) 评论(1) 推荐(0) 编辑
摘要:一、计算列 MySQL 的 Generated Column 又称为虚拟列或计算列。Generated Column列的值是在列定义时包含了一个计算表达式计算得到的。 1、定义Generated column列的语法如下: 列名 类型 [GENERATED ALWAYS] AS (expr) [VI 阅读全文
posted @ 2021-09-05 20:36 古兰精 阅读(5833) 评论(0) 推荐(0) 编辑
摘要:一、in 与 exists 的区别 1、exists、not exists 一般都是与子查询一起使用,In 可以与子查询一起使用,也可以直接in (a,b.....) 2、exists 会针对子查询的表使用索引,not exists 会对主子查询都会使用索引。in 与子查询一起使用的时候,只能针对主 阅读全文
posted @ 2021-09-04 18:08 古兰精 阅读(1756) 评论(0) 推荐(1) 编辑
摘要:一、union、union all 、distinct 的区别和用途 1、从用途上讲:它们都具有去重的效果 2、从效率上讲:distinct 通常不建议使用,效率较低。union all 和 union 而言,union all 效率更高。 原因是:union 相当于多表查询出的数据,进行去重,然后 阅读全文
posted @ 2021-09-03 18:59 古兰精 阅读(4900) 评论(0) 推荐(0) 编辑
摘要:在 mysql 操作中我们经常需要对数据进行类型转换,此时我们应该使用的是cast()或convert()。两者的对比: 相同点:都是进行数据类型转换,实现的功能基本等同。 不同点:两者的语法不同,cast(value as type) 、 convert(value,type) 一、语法 1、使用 阅读全文
posted @ 2021-09-03 18:34 古兰精 阅读(1690) 评论(0) 推荐(0) 编辑
摘要:一、隐式类型转换问题 1、隐式类型转换: 比如:SELECT 1 + '1'; 2、隐式类型转换的问题: (1)程序可读性差,且依赖数据库的隐式转换规则,效率差,会增加处理时间;且如果数据库升级,则程序可能无法正确执行; (2)有可能会导致索引失效; (3)有可能会导致意想不到的结果; 3、显式类型 阅读全文
posted @ 2021-09-03 13:45 古兰精 阅读(1614) 评论(0) 推荐(0) 编辑
摘要:一、SQL having子句简介 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。 HAVING 子句可以让我们筛选分组后的各组数据。 1、SQL HAVING 语法:operator 代表运算操作符、aggregate_function 代表聚合函数 SEL 阅读全文
posted @ 2021-09-03 13:17 古兰精 阅读(1265) 评论(0) 推荐(0) 编辑
摘要:1、在select查询中,只返回需要的列。查询中存在的列越少,则使用的IO和网络带宽就会越少。最好不要使用 * 返回所有: select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 2、在减少列的同时,也要考虑一下减少行。使用where子句来减少查询返回的行,不要让应 阅读全文
posted @ 2021-09-02 22:41 古兰精 阅读(296) 评论(0) 推荐(0) 编辑
摘要:1、自动保存 通常我们希望PM2本身开机自启,需要执行 pm2 startup 让其注册到操作系统的服务管理工具中。 如果我们还希望PM2中的进程能随着PM2启动而启动,就需要每次在新增或删除进程后执行 pm2 save; 但如果你是一个像笔者一样记性不好的人,很可能会忘记执行这一步,导致PM2重新 阅读全文
posted @ 2021-09-02 22:29 古兰精 阅读(3277) 评论(0) 推荐(1) 编辑
摘要:可以看下这篇文章:《iOS开发之上传包遇到的问题解析 - https://www.jianshu.com/p/667257ae79c8》,这里遇到的问题多些,我目前是遇到一个版本号的问题。 iOS 的 ipa 包上传之后收到这样的邮件 错误码: ERROR ITMS-90478: "Invalid 阅读全文
posted @ 2021-09-02 11:40 古兰精 阅读(950) 评论(0) 推荐(0) 编辑
摘要:一、pm2 自定义 log 日志文件位置 直接引用 PM2 官网描述:https://pm2.keymetrics.io/docs/usage/log-management/ 1、CLI 示例:pm2 start echo.js --merge-logs --log-date-format="YYY 阅读全文
posted @ 2021-09-01 13:27 古兰精 阅读(14202) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示