技术文章

PERL实现多线程的一些demo程序

狂风中的少年 提交于 2021-02-17 12:51:46
以前学perl时候的一些笔记。主要是perl来写多线程的程序,整理一下 1 #!/bin/perl use threads; use threads::shared; # 涉及到一些进程间变量的共享,用这个模块 my $process = 4; my $child_num = 0; print $threads::VERSION.chr(10); while (1) { if ($child_num < $process){ my $params = $child_num.':..........'; my $thr = threads->create(\&start_thread, $params); $child_num ++; } #foreach my $t(threads->list()){ foreach my $t(threads->list(threads::joinable)){ $t->join(); } # all tasks done and no running child, then exit if ($child_num==4){ exit; } } sub start_thread(){ # do actually task here my $param = shift; print $param.chr(10); } 2 my $maxchild

3分钟带你了解Qlik Sense

大兔子大兔子 提交于 2021-02-17 12:51:23
​ 小A是公司“表哥”,负责公司内部财务月报表。每个月写财务报告时,小A总在发愁: 第一代BI时期 每个月底,小A总有那么几天 重复着下面的工作 : 1. 从 ERP 系统的财务模块中下载发票数据到Excel 2. 从 CRM 系统下载顾客数据到Excel (...此处省略多个其他维度...) 3. 将这几个表用vlookup 和 sumif给连起来 ...安静的等待Excel计算几十分钟... ...如果死机,那一定是天意让我coffee break 然后再重复以上步骤,... 4. 形成数据透视图 5. 截图粘贴到ppt, 发给老总 老总已经不是当年那个岁月静好的老总,看看静态的ppt已经不能满足他的需求。 “小A啊,整体销售情况不错,帮我分析下苏锡常的具体情况” 于是小A重新打开那200MB的Excel工作簿,当然,打开的时候少不了那十来分钟的数据加载和重新计算。 小A耐着性子再筛选工具中选择“苏锡常”大区,发现文件还是很大,不得不在数据层删除了非苏锡常的数据,好歹让Excel文件大小降低到了100MB. 但还是没法以附件的方式发给老总啊。折腾了大半天,最后U盘给了老总。 老总又提出了让小A怀疑人生的世纪难题 “小A啊,能不能把苏锡常和京津冀对比下?然后数据文件发给北京的同事?” 这样的场景相信大家并不陌生,那 繁琐的数据处理与合并步骤 (vlookup, sumif) ,

spring aop 之链式调用

徘徊边缘 提交于 2021-02-17 12:51:10
关关雎鸠,在河之洲。窈窕淑女,君子好逑。 概述 AOP ( Aspect Orient Programming ),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。 Spring AOP 采用的是动态代理,在运行期间对业务方法进行增强,所以不会生成新类, Spring AOP 提供了对 JDK 动态代理的支持以及CGLib的支持。本章我们不关注 aop 代理类的实现,我简单实现一个指定次序的链式调用。 实现链式调用的 MethodInterceptor 定义拦截器链, MethodInvocation 递归进入下一个拦截器链中。类图如下: MethodInterceptor public interface MethodInterceptor { Object invoke(MethodInvocation invocation) throws Throwable; } MethodInvocation public interface MethodInvocation { Object proceed() throws Throwable; } AbstractAspectJAdvice 抽象类,实现 MethodInterceptor public abstract class

Django REST framework API认证(包括JWT认证)

ぃ、小莉子 提交于 2021-02-17 12:50:40
Django REST framework API认证(包含JWT认证) + 权限 发表于 2019-02-24 | 分类于 Django , PYTHON | 0 | 阅读次数: 30 字数统计: 6.3k | 阅读时长 ≈ 26 Django REST framework API认证(包含JWT认证) + 权限 Django REST framework API认证(包含JWT认证) 一. 背景 在我们学习Django Rest Framework(简称DRF)时,其非常友好地给我们提供了一个可浏览API的界面。很多测试工作都可以在可浏览API界面完成测试。要使用可浏览API界面很简单,只需要在urls.py文件中添加如下部分即可。 1 2 3 4 from django.conf.urls import include urlpatterns += [ url( r'^api-auth/' , include( 'rest_framework.urls' , namespace= 'rest_framework' )) ] 其中, r'^api-auth/' 部分实际上可以用任何你想使用URL替代,唯一的限制是所包含的URL必须使用 'rest_framework' 命名空间。在Django 1.9+中,REST framework将自动设置,所以你也无须关心。 配置完成后

wireshark抓包分析tcp连接与断开

谁都会走 提交于 2021-02-17 12:50:10
  其实对于网络通信的学习,最好还是能够自己抓到包详细地看一下,不然只单单通过文字和图的描述印象不够深刻。本文通过实际的抓包操作来看一下tcp的连接与断开是怎样的。   首先需要去https://www.wireshark.org/下载wireshark对应你机器位数的版本,也可以用这个连接直接下载(64位)http://sw.bos.baidu.com/sw-search-sp/software/16fb23dbe1547/Wireshark-win32-2.4.3.0.exe。   安装完成后打开,会看到如下页面:      下面这两个以太网指的是你电脑上不同的网卡,选择一个可以跑的网卡,双击。   打开之后你会看到各种各样颜色的包,这里就是wireshark抓到的包了,我们需要做的就是 过滤出我们想看的tcp包 。这里我们过滤器栏输入过滤条件,过滤出我们想要的。本文以PC和www.baidu.com作为通信的双方,百度其中一个ip为 14.215.177.38 。在过滤器栏中输入如下内容: (ip.src==XXX.XXX.XXX.XXX and ip.dst==14.215.177.38) or (ip.src==14.215.177.38 and ip.dst==XXX.XXX.XXX.XXX) ,其中XXX.XXX.XXX.XXX为你本机的地址。我们要看tcp连接和断开

浙大版《C语言程序设计(第3版)》题目集 习题3-1 比较大小(10 分)

岁酱吖の 提交于 2021-02-17 12:49:59
本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数,其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。 输入样例: 4 2 8 输出样例: 2->4->8 1 #include <stdio.h> 2 3 int main() 4 5 { 6 int a,b,c; 7 int num[ 3 ]={ 0 }; 8 int temp; 9 for ( int i= 0 ;i< 3 ;i++ ) 10 { 11 scanf( " %d " ,& num[i]); 12 13 } 14 for ( int i= 0 ;i< 2 ;i++ ) 15 { 16 for ( int j= 0 ;j< 2 -i;j++ ) 17 { 18 if (num[j]>num[j+ 1 ]) 19 { 20 21 temp= num[j]; 22 23 num[j]=num[j+ 1 ]; 24 25 num[j+ 1 ]= temp; 26 } 27 } 28 } 29 printf( " %d->%d->%d\n " ,num[ 0 ],num[ 1 ],num[ 2 ]); 30 return 0 ; 31 } 在网上找了几个具体实现的代码,用分支语句的都不太理想,最后还是选择了for循环。 来源: oschina 链接: https:/

分布式之分布式事务、分布式锁、分布式Session

拟墨画扇 提交于 2021-02-17 12:48:35
点击上方 " 程序员小乐 "关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 It is our choices... that show what we truly are, far more than our abilities.J. K. Rowling . 决定我们一生的,不是我们的能力,而是我们的选择。 每日掏心 话 没有不能改变的事,因为自己改变了,状况也就跟着转变。 来自 : ava未来的大佬 | 责编:乐乐 链接:cnblogs.com/heqiyoujing/p/10917102.html 程序员小乐(ID:study_tech) 第 959 次推文 图源:百度 往日回顾: 程序员吐槽:入职两周,怀疑自己进了假百度!跟传说中完全不一样 正文 一、分布式session   session 是啥?浏览器有个 cookie,在一段时间内这个 cookie 都存在,然后每次发请求过来都带上一个特殊的 jsessionid cookie ,就根据这个东西,在服务端可以维护一个对应的 session 域,里面可以放点数据。   一般的话只要你没关掉浏览器,cookie 还在,那么对应的那个 session 就在,但是如果 cookie 没了,session 也就没了。常见于什么购物车之类的东西,还有登录状态保存之类的。   这个不多说了,懂

看板与Scrum:哪个更适合你的团队?

蹲街弑〆低调 提交于 2021-02-17 12:47:41
敏捷是理想型指标和原则,看板和Scrum是帮助团队坚持敏捷原则并完成工作的基本框架。本文详细介绍了在Scrum和看板之间做出选择时要考虑的关键因素,以及如果我们无法做出决定时该怎么办。 Scrum和看板实践之间的区别很容易总结出,但这只是表面上的。虽然这两种框架实践起来不同,但原则基本相同,他们都将帮助团队以更高的效率构建更好的产品和服务。 敏捷 敏捷是一种结构化的迭代方法,多用于项目管理和产品开发。它根据产品开发的波动性特征,为组织团队提供了一种能够在不偏离项目常规轨道的情况下随时作出响应、更改的方法。今天,敏捷很难成为某个组织的独有竞争优势,因为还没有被彻底掌握并做到最佳。这意味着把它做好比以往任何时候都更重要。 (敏捷开发流程) 看板 看板可以让你手头的工作变得可视化,并限制正在进行的大量工作,最大化提升效率(或优化流程)。团队通过使用看板并不断改进他们的工作流程,能够有效减少从项目(或需求)开始到结束所花费的时间。 Scrum Scrum团队通常以Sprints的固定时间间隔为准来交付最终产品,他们的做法是创建循环任务,以便快速收集和集成客户反馈。Scrum团队采用特定的角色,创建特殊的工具,并定期举行会议来保持项目的进展。 Scrum:结构化的敏捷方法 使用Scrum的团队,需要承诺在每个Sprint结束时交付一些有价值的工作增量。Scrum专注于小的增量工作

囚徒健身

不问归期 提交于 2021-02-17 12:47:25
桥 1. 短桥 1组各10个 2组各25个 3组各50个 2. 直桥 1组各10个 2组各20个 3组各40个 3. 高低桥 1组各8个 2组各15个 3组各30个 4. 顶桥 1组各8个 2组各15个 2组各25个 5. 半桥 1组各8个 2组各15个 2组各20个 6. 标准桥 1组各6个 2组各10个 2组各15个 7. 下行桥 1组各3个 2组各6个 2组各10个 8. 上行桥 1组各2个 2组各4个 2组各8个 9. 合桥 1组各1个 2组各3个 2组各6个 10. 铁板桥 俯卧撑 1. 墙壁俯卧撑 1组各10个 2组各25个 3组各50个 2. 上斜俯卧撑 1组各10个 2组各20个 3组各40个 3. 膝盖俯卧撑 1组各10个 2组各15个 3组各30个 4. 半俯卧撑 1组各8个 2组各12个 2组各25个 5. 标准俯卧撑 1组各5个 2组各10个 2组各20个 6. 窄距俯卧撑 1组各5个 2组各10个 2组各20个 7. 偏重俯卧撑 1组各5个 2组各10个 2组各20个 8. 单臂半俯卧撑 1组各5个 2组各10个 2组各20个 9. 杠杆俯卧撑 1组各5个 2组各10个 2组各20个 10. 单臂俯卧撑 深蹲 1. 肩倒立深蹲 1组各10个 2组各25个 3组各50个 2. 折刀深蹲 1组各10个 2组各20个 3组各40个 3. 支撑深蹲 1组各10个

todomvc-app

半世苍凉 提交于 2021-02-17 12:47:04
1、HTML 1 <! doctype html > 2 < html lang ="en" > 3 < head > 4 < meta charset ="utf-8" > 5 < meta name ="viewport" content ="width=device-width, initial-scale=1" > 6 < title > Template • TodoMVC </ title > 7 < link rel ="stylesheet" href ="node_modules/todomvc-app-css/index.css" > 8 <!-- CSS overrides - remove if you don't need it --> 9 < link rel ="stylesheet" href ="css/app.css" > 10 </ head > 11 < body ng-app ="MyTodoMvc" > 12 < section class ="todoapp" ng-controller ="MainController" > 13 < header class ="header" > 14 < h1 > todos </ h1 > 15 < form ng-submit ="add()" > 16 < input class =