Redis(1).基础必备知识
一、什么是NoSQL?时代演进,网页开发可以概述为以下过程:
1、单机Mysql的引进:初始时都是三层访问方式: (DAL数据库访问层)
这种情况下,整个网站的瓶颈存在:(1)、数据量太大,一个机器放不下;(2)、访问量太多—-读写混合,一个服务器受不了;(3)、数据的索引—-B+ Tree,一个机器放不了;
2、Memcached(缓存)+Mysql+垂直拆分:网站80%的时间都是在读数据,那么每次都去查询数据就很麻烦,因此使用缓存将每次读的数据存起来就可以减少服务器的压力!————-解决了大数据时代的读操作
3、Mysql主从复制、读写分离:
4、分库分表、水平拆分、mysql集群:在Memcached的高速缓存,MySQL的主从复制、读写分离的基础上,由于MySQL主库的写压力开始出现了瓶颈,而数据量的猛增但是MyISAM使用表锁,在高并发下就会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM,它采用的是行锁,增加了并发性。根据数据的使用频率或者其它条件来对数据进行数据库划分。比如电商中用户的不常修改的个人信息单独存放在一个数据库。每个 ...
17.打印从1到最大的n位数
问题扩展:本题应当考察的是大数问题,当 n较大时,end会超出 int32 整型的范围,超出取值范围的数字无法正常存储。
大数问题的解决需要考虑三个方面的重点:
1 . 表示大数的变量类型
无论是 short / int / long … 任意变量类型,数字的取值范围都是有限的。因此,大数的表示应用字符串 String 类型。
2 .数字进位
比如说从 9进一位到10 ,从99进1位到100.需要考虑如何操作。
3 .递归的全排列
基于分治的思想,当 n=2时可以分为各位和十位。先固定个位,然后十位依次从 0到9设置。
过程重点:
设置一个char 类型的数组来存储递归过程中某一位的数字,当当前待设置的位置等于题目给出的位数时说明所有位置的数字已经排列完毕,那么生成字符串凭借在结果后面。
对于数字0的处理,开始没有考虑这一点,结果中会出现 01 、001 、0001 这种情况,这不符合题意。那么如何去除多余的0。举例可以发现,当 n=2时,当 结果为 01 时我们需要 String.su ...
剑指Offer 16.数值的整数次方
扩展算法:
快速幂算法:
快速幂算法能帮我们算出指数非常大的幂,传统的求幂算法之所以时间复杂度非常高(为O(指数n)),就是因为当指数n非常大的时候,需要执行的循环操作次数也非常大。所以我们快速幂算法的核心思想就是每一步都把指数分成两半,而相应的底数做平方运算。这样不仅能把非常大的指数给不断变小,所需要执行的循环次数也变小,而最后表示的结果却一直不会变。
算法讲解:比如说一道ACM算法题: 求 A^B的最后三位数表示的整数
解法一: 很简单啊,先求出该数然后对1000求余就得到了结果
12345678910111213/** * 普通的求幂函数 * @param base 底数 * @param power 指数 * @return 求幂结果的最后3位数表示的整数 */public long normalPower(long base,long power){ long result = 1; for(int i=1;i<=power;i++){ result = result*base; } ...
剑指Offer 15.二进制中1的个数
扩展知识:该题重点考察的是如何将一个十进制整数转化为它的二进制数形式。有以下三种方法:
方法一(除基倒取余法):
类似于数学求二进制的过程,将原数n 不断除以2求出余数然后把商作为下一次的待除数,直到商为0
12345678public void binaryToDecimal(int n){ String str = ""; while(n!=0){ str = n%2+str; n = n/2; } System.out.println(str);}
方法二(移位操作):
可以利用移位操作对一个十进制数进行移位。将最高位的数移动至最低为(移31位),然后将最低位的其余位置都清零,使用 & 操作,可以使用和 1 相与来获得该位置对应的二进制位数值;再次移动高位,做出相同的操作,直到最后一位。
1234public void binaryToDecimal2(int n){ for(int i = 31;i > ...
14.减绳子
1. DP 求解假设 res[n] 代表长度为 n 的绳子的最大乘积,那么 res[n] = max(res[n-i] * res[i]),其中(1<=i<n)
特别的有一些特殊值:
res[0] = 0; //不存在
res[1] = 1;
res[2] = 2; //在长度为2时该绳子就不应该被分割了,分割会更小
res[3] = 3; //在长度为3时不应该被分割,分割会更小
代码
1234567891011121314151617181920212223class Solution { public int cuttingRope(int n) { if(n==2) return 1; if(n==3) return 2; // res 数组代表长度为i 的绳子的最大乘积 // 注意res[2]此时为2不为1,因为绳子长度 ...
微信小程序_喵喵交友(二)
Social Contact一、Social Contact介绍:1.1 小程序介绍:Social Contact是一款用于社交交友的小程序,它能够根据用户的登录情况来展示不同的界面特性,其中包含了给心仪用户点赞、获取附近用户的信息进行社交、主动添加对方为好友、查看自己的消息邮箱、好友列表、自己以及好友的信息等等功能。
1.2 目标用户:面向各个年龄段、各种职业的用户,希望通过app来找到趣味相投的人,同时结交更多的朋友。
1.3 应用场景:利用微信小程序这个平台,方便快捷地搭建起日常生活中人与人之间的社交网络,丰富人们的生活。
二、小程序架构思路:
就整体而言,小程序主要分为首页+附近的人+消息+我的 四个主要模块来进行构造
三、小程序的实现及效果图:3.1 效果截图:
3.2 部分功能代码:
自动登录:
1234567891011121314151617181920212223242526272829303132333435/** * 自动登录 */ autoLogin(){ this.getUserLocation(); //用户自动登录功 ...
微信小程序_喵喵交友(一)
1.1 前言叙述:(1)小程序没有DOM对象,一切基于组件化
(2)微信小程序的四个基本文件: a. *.js
b. *.wxml —–> view结构 ——> html
c. *.wxss —–> view 样式——-> css
d. *.json ——> view 数据 ——> json文件
(3)flex布局解析:
https://www.cnblogs.com/echolun/p/11299460.html
(4)移动端适配:1.物理像素
屏幕的分辨率;设备显示控制的最小单元,可以把物理像素看成对应的像素点。
2.设备独立像素/css像素
3.dpr比 & DPI & PPI
(5)小程序的页面配置:
https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar
tabBar 的第一项必须是 ...
力扣 303.区域和检索
303. 区域和检索 - 数组不变
想法:
直接循环计算从i 到 j 两个区域中的所有数值和。但是由于每次检索都需要计算一遍,这样会造成多次计算已有的数值。
注意到当 i≤j 时,sumRange(i,j) 可以写为如下形式: sumRange(i,j) = 到下标j所有数值和 - 到i-1下标所有数值和。 假设数组 nums 的长度为 n,创建长度为 n+1 的前缀和数组 sums,对于 0≤i<n 都有 sums[i+1] = sums[i]+nums[i],则当 0<i≤n时,sums[i] 表示数组nums 从下标 0到下标 i-1 的前缀和。
因此可以得出: sumRange(i,j) = sums[j+1] - sums[i]
编码:12345678910111213141516class NumArray {public: vector<int> sums; NumArray(vector<int>& nums) { int n ...