IT工作实用技巧

奥门威尼斯外围平台 1

1,MDI窗体
设有两个窗体frmMain,frmChild,则:
frmMain:  设IsMdiContainer属性为true
 打开子窗口:
  在相关事件中写如下代码:
奥门威尼斯外围平台,  frmChild child=new frmChild();
  child.MdiParent=this;//this表示本窗体为其父窗体
  child.Show();
  在打开子窗体时,如果只允许有一个子窗体,可以加入如下判断:
  if (this.ActiveMdiChild!=null)
  {
     this.ActiveMdiChild.Close(); //关闭已经打开的子窗体
     //….
  }
更改MDI主窗体背景
 先声明一个窗体对象
 private System.Windows.Forms.MdiClient m_MdiClient;
 在Form_Load等事件中,添加如下代码:
 int iCnt=this.Controls.Count;
 for(int i=0;i<iCnt;i++)
 {
 if(this.Controls[i].GetType().ToString()==”System.Windows.Forms.MdiClient”)
 {
 
this.m_MdiClient=(System.Windows.Forms.MdiClient)this.Controls[i];
  break;
 }
  }
 this.m_MdiClient.BackColor=System.Drawing.Color.Silver;

目前APP的主要有三种开发方式:外包开发、自己组建团队开发,以及非常低门槛的免编程自助式制作。

1.Shell命令行

光标移到行首:Ctrl+a
光标移到行尾:Ctrl+e
删除所有内容:Ctrl+u

1.choice函数:返回一个列表,元组,字符串的随机项   : 
 调用时应导入random模块,如from random import choice

1. 上帝的规矩:局部性原理

2,创建系统托盘菜单
  2.1,创建一个contextMenu(cmnMain)菜单
  2.2,添加一个NotifyIcon组件,设置ContextMenu属性为cmnMain
  2.3,相应窗体改变事件(最小化等)
   private void frmMain_SizeChanged(object sender,EventArgs e)
   {
      if (this.WindowState==FormWindowState.Minimized)
      {
         this.Hide();
         noiMain.Visible=true;
      }
   }

APP外包开发的市场费用通常十万起步,高级的可能达数百万。外包可以对产品精细化打磨,但是费用比较贵,主要因为以下三点:

2.Vim命令模式

光标移到行首:0或者Shift+^
光标移到行尾:Shift+$
光标移到首行:gg
光标移到尾行:Shift+g
撤销当前操作:u

2.print 两个字符串, 逗号,+号进行连接都可以

这个原理讲的是在一段时间里, 整个程序的执行仅限于程序的某一个部分,
相应的, 程序访问的存储空间也局限于某一个内存区域, 具体分为:

  2.4,相应用户单击系统托盘上contextmenu菜单事件
  private void mniOpen(object sender,EventArgs e)
  {
      noiMain.Visible=false;
      this.Show();
      this.Focus();
  }

第一:APP的产品部分包括安卓版APP、苹果iOS版APP、运营管理后台、手机运营助手、服务器等。每一项都需要单独从零开始开发。

3.查看Linux版本信息

lsb_release -a
cat /etc/redhat-release
cat /etc/issue
cat /proc/cpuinfo
cat /proc/version
uname -a
uname -r

lsb_release -a command not found 解决方法

[root@localhost ~]# lsb_release -a
-bash: lsb_release: command not found

解决方法:
yum install -y redhat-lsb

3.range(start,stop[,step])   可以有以下情形的妙用:

时间局部性:是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;
如果某数据被访问,则不久之后该数据可能再次被访问。

  2.5,响应用户双击系统托盘图标事件
  private void noiMain_DoubleClick(object s,EventArgs e)
  {
      minOpen.PerformClick(); //相当与mniOpen按钮的单击事件
  }
  **注意添加相应的事件句柄**

奥门威尼斯外围平台 2

4.查看内存

free -m
free -h
cat /proc/meminfo

for i in range(0,len(test),MAX_SIZE)

空间局部性:
是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。

3,创建不规则窗体
 3.1,在窗体上创建不规则图象,可以用gdi+绘制,或在图象控件上使用图象填充
 3.2,设置窗体的backcolor为colorA,然后设置TransparencyKey为colorA
 3.3,设置FormBorderStyle为none;

第二:正是基于APP多个部分,所以一个APP开发的人员包括产品经理、UI设计师、前端工程师、服务端工程师、iOS和Android客户端工程师等。

5.Linux终端常用快捷键

新建终端:Ctrl Shift T
放大终端:Ctrl Shift +
缩小终端:Ctrl –

  real_one_test = test[i : i + MAX_SIZE]     
#一次只取得MAX_SIZE 大小的test

为什么是这样? 我也不知道, 可能是计算机界的上帝定下的规矩。

4,创建顶部窗体
  this.TopMost=true;//把窗体的TopMost设置为true
5,调用外部程序
  using System.Diagnostics
  Process proc=new Process();
  proc.StartInfo.FileName=@”notepad.exe”;  //注意路径
  proc.StartInfo.Arguments=””;
  proc.Start();

第三:沟通成本。因为客户不懂专业的APP开发,所以需求的共同比较麻烦。而且后期产品开发出来后,还需进行测试、修改bug、系统改进等等,这个沟通都消耗了大量的时间。

4.requests
是一个同步请求的库,在测试链接的时候可以选用aiohttp这个异步请求库,提高请求速度

但是这个原理的用处可就大了, 例如Java 虚拟机, 本来是解释执行.class
文件,性能不怎么样, 但是利用局部性原理, 就可以找到那些常用的,
所谓的热点代码, 然后把他们编译成本地原生代码(native code),
这样执行效率就和C/C++差不多了。

//获得当前目录Directory.GetCurrentDirectory() (using System.IO)

自建团队通常是科技类公司的主要做法,沟通速度快,比外包开发速度快,但是需要有技术人才的积淀,团队至少需要ps、前台、后台、运维,项目的负责人必须是技术大牛,一般开发周期在2个月左右。而且因为APP包含的产品比较多,所以整体成本也不少。

5.设置对象的元类,可以控制类的生成过程:(如获取类的函数列表等)

当然这个原理更大的用处就是下面要提到的缓存。

6,Toolbar的使用
  Toolbar控件通常需要imagelist控件结合使用(需要用到其中图标)
  响应Toolbar单击事件处理程序代码:
  switch(ToolbarName.Buttons.IndexOf(e.Button))
  {
      case 0:   //第一个按钮
          //code …
          break;
      case 1:   //第二个按钮
          //code …
          break;
      //other case code
      default:  //默认处理,但以上所有项都不符合时
          //code …
          break;
  }

奥门威尼斯外围平台 3

具体步骤为:1.设置metaclass =
test  2.重写test类的__new__(cls,name,bases,attrs)方法 
(注意,这里test类,需要继承type类)

奥门威尼斯外围平台 4

7,弹出对话框获得相关返回值
  在窗体的closing事件中运行如下代码,可以在用户关闭窗体时询问
  DialogResult
result=MessageBox.Show(this,”真的要关闭该窗口吗?”,”关闭提示”,MessageBoxButtons.OKCancel,MessageBoxIcon.Question);
  if (result==DialogResult.OK)
  {
  //关闭窗口
  e.Cancel=false;
  }
  else
  {
  //取消关闭
  e.Cancel=true;
  }

​目前比较火爆的应用公园类的APP在线制作平台可以解决这些问题。

6.python3的列表生成式  和 元组生成式   真的好用

2. 坐飞机的怎么和坐驴车的打交道: 缓存

8,打印控件
  最少需要两个控件
  PrintDocument
 
PrintPreviewDialog:预览对话框,需要printdocument配合使用,即设置document属性为
                     对应的printDocument
  printdocument的printpage事件(打印或预览事件处理程序)代码,必须.

奥门威尼斯外围平台 5

7.join函数
用于连接,字符串,数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串

为什么需要缓存?本质的原因是速度的不匹配。

 float fltHeight=0;
 float fltLinePerPage=0;
 long lngTopMargin=e.MarginBounds.Top;
 int intCount=0;
 string strLine;

应用公园将常见的手机APP功能进行逐一开发,累积了上百个常见的手机APP的功能,比如:登录注册、地图定位、在线聊天、图文资讯、贴吧社区等等。用户只需把需要的功能挑选出来,然后通过图片文字的排版操作,就能极速制作生成手机APP。

8.python的str函数,将对象转换成人阅读的形式,  谁用谁知道

CPU比内存快100多倍, 比硬盘快1000多万倍。

 //计算每页可容纳的行数,以决定何时换页
 fltLinePerPage=e.MarginBounds.Height/txtPrintText.Font.GetHeight(e.Graphics);  
 while(((strLine=StreamToPrint.ReadLine()) != null) &&
(intCount<fltLinePerPage))
 {
    intCount+=1;
   
fltHeight=lngTopMargin+(intCount*txtPrintText.Font.GetHeight(e.Graphics));
   
e.Graphics.DrawString(strLine,txtPrintText.Font,Brushes.Green,e.MarginBounds.Left,fltHeight,new
StringFormat());
 }

奥门威尼斯外围平台 6

9.from multiprocessing import Process  

如果CPU每次做事的时候, 都等着内存和硬盘,
那整个计算机的速度估计要慢的要死了。

 //决定是否要换页
 if (strLine!=null)
 {
    e.HasMorePages=true;
 }
 else
 {
    e.HasMorePages=false;
 }
  以上代码的StreamToPrint需要声明为窗体级变量:
  private System.IO.StringReader StreamToPrint;

而且,应用公园逐步沉淀了上百个垂直行业的整套原生APP的模板,这些模板都已直接使用,一键生成手机APP。后期的运营管理中,只需要进行图片文字的填充即可。而且这些模板通过应用公园平台还可以进行二次修改编辑,平台上现有的功能都可以自由添加删减。

test_process = Process(target=任务)

所以根据局部性原理, 操作系统会把经常需要用的数据从硬盘取到内存, CPU
会把经常用的数据从内存取到自己的缓存中。

  打开预览对话框代码(不要写在printpage事件中)
  StreamToPrint=new System.IO.StringReader(txtPrintText.Text);
  PrintPreviewDialogName.ShowDialog();

test_process.start()    #用于多任务处理

通过这种办法等待的问题能带到极大的缓解。

9,string对象本质与StringBuilder类,字符串使用
string对象是不可改变的类型,当我们对一个string对象修改后将会产生一个新的string对
象,因此在需要经常更改的字符对象时,建议使用StringBuilder类:
[范例代码]构造一个查询字符串
StringBuilder sb=new StringBuilder(“”);
sb.Append(“Select * from Employees where “);
sb.Append(“id={0} and “);
sb.Append(“title='{1}'”);
String cmd=sb.ToString();
sb=null; //在不再需要时清空它
cmd=String.Format(cmd,txtId.Text,txtTile.Text); //用实际的值填充格式项

10.判断对象是否为None的三种写法:

在Web 开发中,缓存更是非常常见的, 由于数据库太慢,
大部分Web系统都会把最常用的业务数据放到内存中缓存起来。

判断字符串是否为空:
检查一个字符串是否为空或不是一个基本的编程需要,一个有效的方法是使用string类的Length属性来取代使用null或与””比较。

if not x

3. 抛弃细节: 抽象

比较字符串:使用String.Equals方法来比较两个字符串
string str1=”yourtext”;
if (str1.Equals(“TestSting”) )
{
  // do something
}

if x is None

抽象是计算机科学中最为重要的概念之一。

10,判断某个字符串是否在另一个字符串(数组)中
 需要用到的几个方法
 string.Split(char);//按照char进行拆分,返回字符串数组
 Array.IndexOf(Array,string):返回指定string在array中的第一个匹配项的下标
 Array.LastIndexOf(Array,string):返回指定string在array中的最后一个匹配项的下标
 如果没有匹配项,则返回-1
 [示例代码]:
 string strNum=”001,003,005,008″;
 string[]
strArray=strNum.Split(‘,’);//按逗号拆分,拆分字符为char或char数组
 
 Console.WriteLine(Array.IndexOf(strArray,”004″).ToString());

if not x is None

当我们遇到复杂问题的时候, 抽象是非常重要的武器。

 11,DataGrid与表和列的映射
从数据库读取数据绑定到DataGrid后,DataGrid的列标头通常跟数据库的字段名相同,如果
不希望这样,那么可以使用表和列的映射技术:
using System.Data.Common;
string strSql=”select * from Department”;
OleDbDataAdapter adapter=new OleDbDataAdapter(strSql,conn);
DataTableMapping
dtmDep=adapter.TableMappings.Add(“Department”,”部门表”);
dtmDep.ColumnMappings.Add(“Dep_Id”,”部门编号”);
dtmDep.ColumnMappings.Add(“Dep_Name”,”部门名称”);
DataSet ds=new DataSet();
adapter.Fill(ds,”Department”); //此处不能用”部门表”

《深入理解计算机系统》一书中提到:

响应单击事件(datagrid的CurrentCellChanged事件)
DataGridName.CurrentCell.ColumnNumber;//所单击列的下标,从0开始,下同
DataGridName.CurrentCell.RowNumber;//所单击行的下标
DataGridName[DataGridName.CurrentCell];//所单击行和列的值

“指令集是对CPU的抽象, 文件是对输入/输出设备的抽象,
虚拟存储器是对程序存储的抽象, 进程是对一个正在运行的程序的抽象,
而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。”—
总结的非常精辟

DataGridName[DataGridName.CurrentRowIndex,n].ToString();//获得单击行第n+1列的值

CPU集成电路硬件无比复杂, 但是我们写程序肯定不用接触这些硬件细节,
那样就累死了, 我们只要遵循CPU的指令集, 程序就可以正确的运行,
而不用关心指令在硬件层次到底是怎么运行的。

12,动态添加菜单并为其添加响应事件
 添加顶级菜单:
 MainMenuName.MenuItems.Add(“顶级菜单一”);//每添加一个将自动排在后面

硬盘也是这样, 有磁道,柱面,扇区,
我们写应用层程序也不用和这些烦人的细节打交道,
在操作系统和设备驱动的配合下,
我们只需要面对一个个“文件”,打开,读取,关闭就行了。
操作系统会把逻辑的文件翻译成物理磁盘上的字节。

 添加次级菜单:
 MenuItem mniItemN=new MenuItem(“MenuItemText”)
 MenuItem mniItemN=new MenuItem(“MenuItemText”,new
EventHandler(EventDealName))
 MainMenuName.MenuItems[n].MenuItems.Add(mniItemN);//n为要添加到的顶级菜单下标,从0开始

再比如为了实现数据的共享,数据的一致性和安全性,需要大量的,复杂的程序代码来实现,
每个应用程序都实现一份肯定不是现实的。
所以计算机科学抽象出了一个叫数据库的东西, 你只需要安装数据库软件,
使用SQL和事务就能实现多用户对数据的安全访问了。

 创建好菜单后添加事件:
 mniItemN.Click+=new EventHandler(EventDealName);

奥门威尼斯外围平台 7

 也可以在添加菜单的同时添加事件:
 MenuItem mniItemN=new MenuItem(“MenuItemText”,new
EventHandler(EventDealName));
 MainMenuName.MenuItems[n].MenuItems.Add(mniItemN);

4. 我只想和邻居打交道: 分层

13,正则表达式简单应用(匹配,替换,拆分)
 using System.Text.RegularExpressions;

分层其实也是抽象的一种,它通过层次把复杂的,可能变化的东西隔离开来,
某一层只能访问它的直接上层和下层, 不能跨层访问。

 //匹配的例子
 string strRegexText=”你的号码是:020-32234102″;
 string filter=@”\d{3}-\d*”;

比如Web开发的分层:分层的好处就是隔离变化, 在接口不变的情况下,
某一层的变化只会局限于本层次内。

 Regex regex=new Regex(filter);
 Match match=regex.Match(strRegexText);

即使是接口变化, 也仅仅会影响调用方。

 if (match.Success) //判断是否有匹配项
 {
     Console.WriteLine(“匹配项的长度:”+match.Length.ToString());
     Console.WriteLine(“匹配项的字符串:”+match.ToString());
    
Console.WriteLine(“匹配项在原字符串中的第一个字符下标:”+match.Index.ToString());
 }
 
 //替换的例子
 string replacedText=regex.Replace(strRegexText,”020-88888888″);
 Console.WriteLine(replacedText);//输出”你的号码是:020-88888888″

5. 我怕等不及: 异步调用

 //拆分的例子
 string strSplitText=”甲020-32654已020-35648丙020-365984″;
 foreach(string s in regex.Split(strSplitText))
 {
    Console.WriteLine(s); //依次输出”甲乙丙”
 }

当你的程序需要等待一个长时间的操作而被阻塞住时而无所事事的时候,
异步调用就派上用场了。

13,多线程简单编程
 using System.Threading;

异步调用简单就是说: 我等不及你了, 先去做别的事情,
你做完了告诉我一声。

 Thread ThreadTest=new Thread(new ThreadStart(ThreadCompute));
 ThreadTest.Start();//使用另一个线程运行方法ThreadCompute
 
 ThreadCompute方法原型:
 private void ThreadCompute()
 {}

回到最早的那个CPU的例子, CPU速度太快,
当它想读取硬盘文件的时候,是不会等待慢1000多万倍的硬盘的,
它会启动一个DMA , 不用通过CPU, 直接把数据从硬盘读到内存,
读完以后通过中断的方式来通知CPU。

14,操作注册表
using System.Diagnostics;
using Microsoft.Win32;
  //操作注册表
  RegistryKey
RegKey=Registry.LocalMachine.OpenSubKey(“Software”,true);
  //添加一个子键并给他添加键值对
  RegistryKey NewKey=RegKey.CreateSubKey(“regNewKey”);
  NewKey.SetValue(“KeyName1″,”KeyValue1”);
  NewKey.SetValue(“KeyName2″,”KeyValue2”);
  //获取新添加的值
  MessageBox.Show(NewKey.GetValue(“KeyName1”).ToString());
  //删除一个键值(对)
  NewKey.DeleteValue(“KeyName1”);
  //删除整个子键
  RegKey.DeleteSubKey(“regNewKey”);

Node.js 和 Web服务器Nginx 也是这样,
一个线程或若干个线程处理所有的请求, 遇到耗时的操作, 绝不等待,
马上去干别的事情,等到耗时操作完成后,再来通知这些干活的线程。

本文来自: IT知道网()
详细出处参考:

还有著名的AJAX , 当浏览器中的javascript发出一个Http 请求的时候,
也不会等待从服务器端返回数据, 只是设置一个回调函数,
服务器响应数据回来的时候调用一下就行了。

奥门威尼斯外围平台 8

6. 大事化小, 小事花了 : 分而治之

分而治之的基本思想是将一个规模比较大的问题分解为多个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,最后组合起来就可得到原问题的解。

由于子问题和原问题性质相同, 所以很多时候可以用递归。

归并排序就是一个经典的例子, 数据结构与算法书上到处都是,
这里就不在赘述了。

如果把分而治之泛化一下, 到软件设计领域,
就可以认为是把一个大问题逐步分解的过程

这里推荐一下我的学习交流群:731771211,里面都是学习前端的。从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,有想学习web前端的,或是转行,或是大学生,还有工作中想提升自己能力的,正在学习的小伙伴欢迎加入学习。希望能帮助你更了解前端,学习前端

相关文章