分类归档 技术杂谈

通过seo圣人

python推导乘法口诀表源码

python推导乘法口诀表源码如下:

#推导乘法口诀表
print('\n'.join(['\t'.join(['{}×{}={}'.format(j,i,j*i) for j in range(1, i+1)]) for i in range(1,10)]))

python推导乘法口诀表截图如下:

python用for循环打印乘法口诀表:

for x in range(1,10):
    for y in range(1,x+1):
        print('{}+{}={}\t'.format(x,y,x+y),end='')
    print()

通过seo圣人

巧用下拉词提升企业的品牌知名度

在互联网时代,我们迎来了很多新鲜的东西,也见证了很多巨头的衰落,在这个时代,一个企业不具备互联网思维是非常可怕的,那么我今天要和大家分享的就是“巧用下拉词提升企业的品牌知名度”。

大家都知道,咱们中国是一个非常强悍的制造业大国,无论你从事什么行业,无论你从事什么领域,和你做同类产品的总是有很多,这时候,竞争的激烈程度可想而知,那么我们怎样利用下拉词让你的品牌知名度在互联网中脱颖而出呢?

如果搜索某产品,下拉提示词出现你的企业,这无疑会提现出有很多人搜索了你的产品,用户从搜索就认识了你的企业,这就是下拉词的威力!假设你的产品在互联网搜索做了竞价或者优化,这一步不仅提升了你的品牌知名度,而且还节约了广告成本,降低了优化的难度,以金融为例:

“做金融的企业非常多,竞争非常激烈,该关键词的搜索指数达到了好几万”,那么有个公司叫360金融,你一搜索金融,下面就会提示360金融,这样一来,大多数会去直接看这个品牌,这样既提升了品牌,也达到了减少推广成本的目的,因为点击金融的价格和点击360金融的价格相差几十倍。如下图所示:

友情提醒:本产品由上海度鼠网络科技有限公司独家研发,如果您有做下拉词优化的需求或者想做代理,请加微信:possen  联系电话:13817842434


现在能做百度下拉框搜索的优化公司效果好?


百度下拉框暗藏的SEO秘诀


百度移动端搜索的下拉提示和相关推荐负面词怎么删除?


刷百度移动端搜索下拉框怎么实现的?


百度下拉是怎么做的?

通过seo圣人

解决汉化Qt软件乱码的问题

直接为程序注入以下DLL,就可以解决乱码并且汉化,该软件为QT4.0 通用。
 
今天汉化一款Advanced IP Scanner 2.224的程序,发现是QT的编译的,很少见到这种软件。汉化之。声明我是菜鸟 代码修改DLL的编写完全由鸾霄汉化组技术yes2 ever分析编写。我就无耻的发布下。。

大家可以自己分析下行为。我分析的可能不对。我简单的介绍下QT。编码问题
QTextCodec::codecForName(“GB2312”)假如你要编译中文*(国际化)的话。需要定义一下字符编码  否则输出为乱码。

可以参考文章: http://blog.csdn.net/yuanzhangmei1/article/details/7696330

这个软件 搜ASCII是可以找到 菜单选项的。 可是会用函数扩充为 Unicode。所以乱码了。。

代码下载
CiMcn.rar (7.94 KB, 下载次数: 0)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// CiMcn.cpp : 定义 DLL 应用程序的入口点。

通过seo圣人

图解冒泡算法

冒泡排序算法其实就是比较相邻的元素。如果第一个比第二个大,就交换他们两个的位置。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

C语言编写的冒泡算法:

#include <stdio.h>
 
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
 
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
    elemType temp;
    int i, j;
    for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
        for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
            if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
}
int main (void) {
    elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
    int len = 10;
    int i;
     
    bubbleSort (arr, len);
    for (i=0; i<len; i++)
        printf ("%d\t", arr[i]);
    putchar ('\n');
     
    return 0;
}

Python语言编写的冒泡算法:

def bubble_sort(nums):
    for i in range(len(nums) - 1):  # 这个循环负责设置冒泡排序进行的次数
        for j in range(len(nums) - i - 1):  # j为列表下标
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
    return nums
 
print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))
# 输出:[8, 12, 19, 22, 32, 33, 45, 97]

C++编写的冒泡算法:

#include <iostream>
using namespace std;
template<typename T>
//整数或浮点数皆可使用
void bubble_sort(T arr[], int len)
{
    int i, j;  T temp;
    for (i = 0; i < len - 1; i++)
        for (j = 0; j < len - 1 - i; j++)
        if (arr[j] > arr[j + 1])
        {
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
}
int main()
{
    int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };
    int len = (int) sizeof(arr) / sizeof(*arr);
    bubble_sort(arr, len);
    for (int i = 0; i < len; i++)
        cout << arr[i] << ' ';
 
    cout << endl;
 
    float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 };
    len = (int) sizeof(arrf) / sizeof(*arrf);
    bubble_sort(arrf, len);
    for (int i = 0; i < len; i++)
        cout << arrf[i] << ' ';
 
    return 0;
}

PHP语言编写的冒泡算法:

function bubbleSort($numbers) {
    $cnt = count($numbers);
    for ($i = 0; $i < $cnt - 1; $i++) {
        for ($j = 0; $j < $cnt - $i - 1; $j++) {
            if ($numbers[$j] > $numbers[$j + 1]) {
                $temp = $numbers[$j];
                $numbers[$j] = $numbers[$j + 1];
                $numbers[$j + 1] = $temp;
            }
        }
    }
 
    return $numbers;
}
 
$num = array(20, 40, 60, 80, 30, 70, 90, 10, 50, 0);
var_dump(bubbleSort($num));

其实无论你用了什么语言,你发现,算法的过程都相差无几,那么下面我用两组图片来解释冒泡算法的排序过程:

(图一冒泡算法)

(图二冒泡算法)

怎么样,通过动态图片对冒泡算法的讲解,是不是通俗易懂?

通过seo圣人

nginx跳转规则基础知识详解

做运维的都知道,nginx是一款非常轻巧而又强大的web服务端软件,性能非常突出,软件本身体积也很小,较apache相比,nginx有着许多无可替代的优势,那么我们今天就详细的讲解下nginx跳转规则的基础知识。

下面的句子是一段简单的nginx语法规则:

location [=|~|~*|^~] /uri/ { … }

针对上面的例子,我来对这段nginx规则里面的每一个符号做一个详细的解释:
= 开头表示精确匹配;
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格);
~ 开头表示区分大小写的正则匹配;
~*  开头表示不区分大小写的正则匹配;
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则;
/ 通用匹配,任何请求都会匹配到;
多个location配置的情况下匹配顺序为(参考资料而来,还未实际验证,试试就知道了,不必拘泥,仅供参考);
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。

下面是一段nginx匹配规则以及详细的解释,具体的规则省略:

location = / {
	#规则A
	#访问根目录/, 比如https://www.dobunkan.com/ 将匹配规则A
}

location = /login {
	#规则B
	#访问 https://www.dobunkan.com/login 将匹配规则B,https://www.dobunkan.com/register 则匹配规则H
}

location ^~ /static/ {
	#规则C
	#访问 https://www.dobunkan.com/static/a.html 将匹配规则C
}

location ~ \.(gif|jpg|png|js|css)$ {
	#规则D
	#访问 https://www.dobunkan.com/a.gif, https://www.dobunkan.com/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用,而 https://www.dobunkan.com/static/c.png 则优先匹配到 规则C
}

location ~* \.png$ {
	#规则E
	#访问 https://www.dobunkan.com/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。
}

location !~ \.xhtml$ {
	#规则F
	#访问 https://www.dobunkan.com/a.xhtml 不会匹配规则F和规则G,https://www.dobunkan.com/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
}

location !~* \.xhtml$ {
	#规则G
	#访问 https://www.dobunkan.com/a.xhtml 不会匹配规则F和规则G,https://www.dobunkan.com/a.XHTML不会匹配规则G,因为不区分大小写。规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
}

location / {
	#规则H
	#访问 https://www.dobunkan.com/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。
}

对于nginx规则,目前中文教程并不多,英语底子不好的很难看的明白,你可以对照上面的讲解逐条尝试,一定会有收获的,当然了,你还需要对你的尝试结果做做总结,这样你才会有进步,在日后的应用中才会得心应手!

通过seo圣人

商务通怎样清除动态口令?

商务通是一款客服工具,一款咨询工具,相信做互联网运营的人都知道这个产品,目前有很多的企业都在使用,之前是为了规避一些漏洞,很多企业启用了商务通口令。但如今随着微信的流行,商务通口令已经无法满足企业的需求,主要是效率太低,使用不方便,那么今天我们就谈谈如何清除商务通动态口令。

当然了,我这里讲的是企业版的商务通,也就是商务通的服务端程序放在你公司的服务器上面,如果你用的是坐席版的商务通请自行联系商务通公司的客服人员给予技术支持。

其实清除商务通动态口令很简单,我们只需要找到商务通服务器目录下的“\LR_Data\Site\你的商务通ID”这个路径下面的klk.config文件,将这个文件清空,然后保存。如果担心操作失误,建议先备份下这个文件。

清空klk.config文件里面的内容之后保存,重启服务器,重新登录商务通,这时候,你发现商务通口令以及你的密码已经被清空,登录第一件事就是需要你重新设置新的密码。

到这里,商务通的动态口令就彻底清理了,如果你有疑问,请在下方留言。

通过seo圣人

Python用raw_input获取键盘输入报错怎么办?

在学习python的时候使用raw_input来获取键盘输入,结果出现了下面的报错:

Traceback (most recent call last):
  File "******\***.py", line 19, in <module>
    j = raw_input("aa")
NameError: name 'raw_input' is not defined

遇到这样的问题让我束手无策,翻阅了大量的资料发现是环境的问题,原来Python从3.0开始抛弃了raw_input这个函数,input函数取而代之,代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def sum(n):
    if (n == 1):
        s=1
    else:
        s = n * sum(n-1)
    return s

i = input("请输入:")
j = sum(i)
print (j)

看了官方的手册,写出了上面的代码,结果又是报错,报错代码如下:

Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\ding\1.py", line 16, in <module>
    j = sum(b)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38-32\ding\1.py", line 9, in sum
    s = n * sum(n-1)
TypeError: unsupported operand type(s) for -: 'str' and 'int'

无奈之下,继续看官方手册对input的介绍,原来官方对input的解释是这样的:

 input([prompt]) 函数和 raw_input([prompt]) 函数基本类似,但是 input 可以接收一个Python表达式作为输入,并将运算结果返回。 input函数返回的是字符串。

说input返回的是一个字符串,而不是int型的,因此才会报错,知道这个问题就好办了,咱们把获取的字符串转换成int型问题就解决了,代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-


def sum(n):
    if (n == 1):
        s=1
    else:
        s = n * sum(n-1)
    return s


i = input("请输入:")
b = int(i)
j = sum(b)
print (j)

到这里,问题彻底解决!总结:在Python环境中,读取键盘输入的函数有raw_input和input两个,在python3里面,函数raw_input已经被丢弃,而input函数从键盘中读取的字符默认为string型。因此读取键盘输入的数据需要根据你的实际环境来写,如果用input来获取字符,记得转换类型!

通过seo圣人

C语言和pyhon语言用递归算法计算1到1000的值

C语言使用递归算法计算从1加到1000的值,代码如下:

#include<stdio.h>
int sum(int n)
{
	int s;
	if(n==1)
	{
		s=1;
	}
	else
	{
		s=n+sum(n-1);
	}
	return (s);
} 

main()
{
	int i=100; 
	int j;
	j=sum(i);
	printf("result:%d",j);
}

Python语言使用递归算法计算从1加到1000的值,代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
申明一个递归函数
'''
def sum(n):
    if (n == 1):
        s=1
    else:
        s = n + sum(n-1)
    return s

i = 1000 
j = sum(i)
print (j)

以上两段代码就是递归算法用C语言和Python两种语言的写法,从代码上看,Python语言的写法貌似更简单,单可读性比较差,C语言代码量略大,单比较容易读懂。

通过seo圣人

这就是所谓的百度发包排名技术

近几年,国内的SEO行业风气不是太好,这其中充斥着大量的黑帽手法,比如:域名泛站群、Ip泛站群、泛目录到后来的点击排名技术,最终发展成为今天的发包排名技术,那么我今天要讲的重点就是所谓的发包排名技术。

不可否认,现在很多优化公司和个人确实可以在非常短的时间内提升关键词排名和网站的权重,笔者有咨询过很多家,并且也做过一定的尝试,这效果确实是真的,只不过他们换了一个说法而已,这也就是他们口中所谓的百度发包排名技术,当然了,这个发包排名技术可以针对百度PC搜索、百度手机搜索、熊掌号、奇虎360搜索、搜狗搜索、神马搜索等等,目前这技术对谷歌没有用处。

那么,什么是百度发包排名技术呢?不少人用抓包工具结合OD伪造一堆所谓的发包技术的截图,以此来诱导SEO需求者,从他们讲述的原理其实就是,电脑分为无数种品牌和分辨率,浏览器也是分为很多不同的种类,在一个重点就是IP地址,这一块很有讲究,IP地址分为运营商、区域,我来讲一下这个发包技术的完整过程:

在电信网络环境下,PC电脑,通过火狐浏览器输入百度的网址,然后搜索某关键词,接下来找到你的网站点开,停留几秒,紧接着随机点一个页面再继续停留,注意,这里停留多久由你自己说了算,这就算一个完整的包。

在移动网络下,iphone手机,通过siri输入百度网址,然后搜索某关键词,接下来找到目标网站打开,停留时间,然后随机点下几个页面,停留,然后清空缓存。

这这里,我们模拟了电信网络环境的PC端、移动网络的Iphone手机,当然了,这些都是可以自由组合的,我来出一组组合图:

按上述情况,终端+区域性IP+后面的选项自由组合,完成一组操作,就算完成一次点击,这当然算搜索引擎的漏洞,当然了,百度目前已经重拳出击开始打击这些作弊手段了,相信他们的日子不会长久了。

说到底,这其实就是点击排名,根本不存在所谓的发包技术,只是他们现在做的更加隐蔽了而已,他们手里有大量的IP地址以及大量的模拟终端,这才是他们的资本。

通过seo圣人

位运算与位移怎样理解?

在python中,位运算分为按位与运算(&)、按位或运算(|)、按位异或运算(^)、按位取反运算(~)、按位左移运算(<<)和按位右移运算(>>),当然了在别的编程语言里面也有涉及这个知识点,譬如C语言、PHP语言、JAVA语言等等,原理都是想通的,俗话说的好“温故而知新”,我在这里把这个知识点再强调一遍。

学过计算机的人对二进制并不陌生,这个位运算其实就是基于二进制的,那么我们在python代码中什么两个变量,方便我们通过实验来讲解位运算:
a = 623 #变量a的二进制为:0010 0110 1111
b = 139 #变量b的二进制为:0000 1000 1011

1、按位与运算(&)
我们先把a和b进行按位于运算,也就是
print a&b #打印的结果是11
为什么结果是11呢?其实在按位与运算中,参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0,那么a和b进行按位与运算之后的二进制就是“0000 0000 1011”,将这个二进制的数字转换成十进制结果就是11。请看下面的按位与运算图解:

2、按位或运算(|)
print a|b # 打印结果是751
在按位或运算中,只要对应的二个二进位有一个为1时,结果位就为1。那么a和b进行按位或运算的的二进制结果就为0010 1110 1111,转换为二进制的结果就是751。请看下面的按位或运算图解:

3、按位异或运算(^)
print a^b # 运算结果为740
在按位异或运算中,当两对应的二进位相异时,结果为1,相同则为0,那么a和b进行按位异或运算的二进制结果就为0010 1110 0100,转换为二进制的结果就为740。请看下面的按位异或运算图解:

4、按位取反运算(~)
print ~a # 运算结果为-624
print ~b # 运算结果为-140
在按位取反运算中,对数据的每个二进制位取反,即把1变为0,把0变为1 。~a的二进制按位取反运算后的二进制结果为1111 1101 1001 0000转换为10进制的结果是-624,~b的二进制按位取反运算后的二进制结果为1111 0111 0100,转换为十进制的结果为-140,这里涉及到反码、补码知识,忘记了的同学请自行恶补!请看下面的按位取反运算图解:

5、按位左移运算(<<)
print a<<b #运算结果为434167633083893069286773515120622788069556224
在左移动运算中,运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。因为数字太大了,我就懒得写了。

6、按位右移运算(>>)
print a>>b #运算结果为0
在右移动运算中,把”>>”左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数,这个数字推算起来也不得了,我也就不多写了,你知道是怎么回事就行了。

 a<<b其实就是把a转换成二进制,向左移动139位,然后在转换成十进制。
 a>>b其实就是把a转换成二进制,向右移动139位,然后在转换成十进制。

因为例子中的数字太大,我现在把数字变小一点,方便大家理解
a=11 #二进制为1011
b=3  #二进制为11
那么a<<b的运算结果如下:
0000 0000 1011
向左边移动3个位置,结果就为:
0000 0101 1000
转换成十进制就等于88

a>>b的运算结果如下:
那么a>>b的运算结果如下:
0000 0000 1011
向右边边移动3个位置,结果就为:
0000 0000 0001

转换成十进制就等于1

针对python的位运算今天就讲这么多,如果你还有不明白的,欢迎在下方留言,咱们一起学习,共同研究!