首页 文章 精选 留言 我的

精选列表

搜索[企业管理系统],共10000篇文章
优秀的个人博客,低调大师

Feed流系统设计-总纲

简介 差不多十年前,随着功能机的淘汰和智能机的普及,互联网开始进入移动互联网时代,最具代表性的产品就是微博、微信,以及后来的今日头条、快手等。这些移动化联网时代的新产品在过去几年间借着智能手机的风高速成长。 这些产品都是Feed流类型产品,由于Feed流一般是按照时间“从上往下流动”,非常适合在移动设备端浏览,最终这一类应用就脱颖而出,迅速抢占了上一代产品的市场空间。 Feed流是Feed + 流,Feed的本意是饲料,Feed流的本意就是有人一直在往一个地方投递新鲜的饲料,如果需要饲料,只需要盯着投递点就可以了,这样就能源源不断获取到新鲜的饲料。 在信息学里面,Feed其实是一个信息单元,比如一条朋友圈状态、一条微博、一条咨询或一条短视频等,所以Feed流就是不停更新的信息单元,只要关注某些发布者就能获取到源源不断的新鲜信息,我们的用

优秀的个人博客,低调大师

如何系统地自学 Python?

一开始学习计算机技术和编程会有些困难:该选择哪个编程语言?用哪个IDE?以及更重要的,为什么选它? 在我看来,编程时最重要的事是选择最适合解决问题的工具。其次是选择自己最擅长的工具。如果我告诉你你应该用C++因为它是速度最快的编程语言之一,但是你没有过任何处理内存管理或者自己设计数据结构的经验的话,那这显然不是个好主意。你在编程中可能会很挣扎并且感觉很糟糕。 而Python解决了很多这些方面的问题。它比C++运行的慢的多,但也容易写的多。作为初学者的你可能往往并不太关心程序跑的有多快,你在意的只是搞一些酷炫的玩意,同时学一点编程的基本概念。 所以你需要做的第一个决定就是学习哪个编程语言。在数百种编程语言中,为什么初学者应该学习Python? 在生活中学会不断挖掘自己的潜力。我们都是一个普通人,可能并不清楚自己到底在哪方面占有优势。所以,学着在生活中找到自己的优势,并根据优势选择一定的就业方向。 不随波逐流。不要看周围的人做什么,自己就做什么,也许别人做的并不适合你。别人的优势很可能会成为你的劣势。所以,坚定自己的想法,让自己知道那些方面适合自己,自己可以胜任。 不断尝试可能成为自己的优势。你不知道什么适合自己,所以才要大胆、勇敢地尝试。找到一种可以属于你的独特的优势。 坚定信念。一旦你坚定了自己的信念,就不要被别人的意见或是讽刺或是嘲笑所干扰。别人不是你,不懂的你在想什么,不清楚你开始这件事的源头。你的事情,不了解你的人,没有资格轻易评说。 不茫然,不多想。别让太多的事干扰到你奋斗下去的信念。梦想不容许太多的杂念。那些杂念只会让你的心愈来愈脆弱,多为一个人考虑,到头来,伤害的还是自己。 择自己学习方法 每个人都有适合自己的方法,有的人去选择自学,有的人选择看视频学习,有的人选择报名培训班,那在这个时候,你就要自己考虑清楚,到底那样对的帮助是最大的,个人觉得是跟着培训班最好的,毕竟人家的实战项目多,我们学软件开发的都知道实战项目对于学好一门语言是 很重要的。 学习python有那些误区 具体里面的误区非常的多,那些就不需要我去写出来,我给你说的一般都是心态的问题,首先一个觉得自己会java和c++,然后我学习python就很牛,但是你要知道语言是有很多相同的地方,但是不是通用,一定要自己学习的仔细。还有一种就是觉得我不会英语,我要先去把英语学习好在来学python。因为自己想还坏主意然后学习,这样的都是容易找进误区的。 学习是对自己最好的投资,而机会属于有准备的人,这是一个看脸的时代,但最终拼的是实力。人和人之间的差距不在于智商,而在于如何利用业余时间,所以没有等出来的辉煌,只有干出来的精彩。其实只要你想学习,什么时候开始都不晚,不要担心这担心那,你只需努力,剩下的交给时间,而你之所以还没有变强,只因你还不够努力,要记得付出不亚于任何人的努力。 1、选择Python版本 对于Python工程师来说,Python的版本则是你们的工作环境。所以在学习之前一定要考虑选择一个合适自己的版本,Python3对零基础的小白很友好,易上手。选好版本后就可以开始学习了。 2、学习Python基础知 Python 是一个有条理的、强大的面向对象的程序设计语言。 首先需要学习Python的基础知识,下载、安装、导入库、字符串处理、函数使用等等。 如果你的英语不是很好,这里可以给你推荐一个超赞的网站一译中文文档,这里会提供Python、pandas、numpy、NLTk、Django等文档的中文翻译,赶紧添加到收藏夹里。如果你更喜欢看视频,可以上网找一些入门教程观看,有很多IT学习网站可以找到,这里就不推荐了。 此外,在基础知识都学会之后,你要开始练习写一个程序,需要文本编辑器——PythonEditors 3、确定学习方向 Python职业学习方向很多,职业方向大体上分为以下六个: Web全栈工程师、爬虫开发工程师、人工智能工程师、Python开发工程师、游戏开发工程师、搜索引擎工程师。 以下选了几个标准库是学习Python用得上且必须了解的: Django**、Flask**、Tornado**、NumPy**、Pandas**、Matplotlib**、Requests**、Scrapy**、threading**、scikit-learn**、TensorFlow** 4、寻找项目练手 只会埋头敲代码的Python开发肯定不是各大公司HR抢着要的,谨记:多找项目多找项目!多练手多练手!只有自己多动手写具体项目,才能更多的犯错,解决问题,位置后工作踩坑,现在练习踩的坑越多,以后和HR谈薪资的时候才会更有底气。 Github内的项目丰富,想找哪个项目可以先去Github上面搜索,例如:你想写一个知乎爬虫,在搜索框搜索“知乎”,然后在语言那一栏里选择Python就可以找到你想要的项目了。 最后,等这些都学的差不多了,你就可以去找工作了。

优秀的个人博客,低调大师

DApp游戏系统开发

DApp 作为区块链技术落地的重要一环,在 Ethereum、EOS 等开发平台的主网络陆续上线后有了一定的发展,而游戏 DApp 作为发展态势最迅猛的一类 DApp,吸引了众多开发者和传统机构的注意。从 2017 年 12 月的 CryptoKitties 到 2018 年 7 月的 Fomo3D,部分热门的游戏 DApp 一度让整个 Ethereum 网络瘫痪,并出现了大量的模仿其游戏机制的收集类、Ponzi 类、FOMO 类的游戏 DApp。在 EOS 平台主网络上线后,其快速确认、无手续费的特性使得竞猜类游戏大规模爆发,并因为 EOS 独特的机制设置,衍生出大量生态设施。 游戏 DApp 的大规模爆发虽然产生了巨量的交易额,但其中仍旧存在不少问题。集中于少数几个 DApp上 的交易额、开发平台与底层协议的稀缺、同质化的游戏机制、过高的用户门槛与使用门槛都在削弱玩家的游戏意愿;良莠不齐的代码质量、不开源的智能合约既不能发挥区块链的优势,又使玩家担忧资金安全。联系shewenfa 要开发一个DAPP,你首先得想明白该DAPP能解决什么问题,其次你要撰写一份项目白皮书,描述该DAPP使用的技术原理、共识机制等。想要从零开始开发一个完整的区块链项目太过复杂,所以目前普通的开发者大多会选择一个相对成熟的平台,依托平台成熟的开发环境来开发自己的DAPP。如此以来,DAPP的开发工作就简单了不少。 当前,DAPP的最流行的开发平台是Ethereum(以太坊)。Ethereum(以太坊)是一个图灵完备的区块链一站式开发平台,采用多种编程语言实现协议,采用Go语言写的客户端作为默认客户端。它允许任何人在平台中建立和使用通过区块链技术运行的分布式应用。我们可以把它理解为区块链领域的Android,它是一个开发平台,用户可以像基于Android Framework一样基于区块链技术开发应用 但随着技术的进步,尤其是在闪电网络、侧链技术等陆续落地之后,游戏的性能将有所提高,而传统游戏厂商的进入也将带来新的观念,游戏机制和通证机制的设置将更为合理与多样。而在技术落地之前,仅将虚拟资产上链的通证上链类游戏或许更易出现多样化的游戏玩法,同时,生态中部分机构或开发者人工地实现部分“跨链”效果。此外,随着开发平台的增多,不同种类的游戏或根据各自的操作需求、资产安全需求选择不同的开发平台,形成游戏种类与开发平台挂钩的状况。

优秀的个人博客,低调大师

Android 系统原生dialog使用

先上图,不上图的程序员不是好程序员: 两个按钮的 dialog 三个按钮的 dialog 列表样式 dialog 单选 dialog 多选 dialog 转圈加载 dialog 带有加载进度的 dialog 带有输入框 dialog 引入布局的 dialog 看了效果下面该看代码了 1、MainActivity的xml内代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/btn_two" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="最普通的 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_three" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="三个按钮的 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="列表 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_multi_select" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="多选 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_single_select" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="单选 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_waiting" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="等待 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_loading" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="加载 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="输入 dialog" android:textAllCaps="false" /> <Button android:id="@+id/btn_my_style" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自定义 dialog" android:textAllCaps="false" /> </LinearLayout> 2、MainActivity的java文件内代码即逻辑代码 public class MainActivity extends AppCompatActivity implements View.OnClickListener { private AlertDialog.Builder builder; private ProgressDialog progressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnTwo = findViewById(R.id.btn_two); Button btnThree = findViewById(R.id.btn_three); Button btnList = findViewById(R.id.btn_list); Button btnMultiSelect = findViewById(R.id.btn_multi_select); Button btnSingleSelect = findViewById(R.id.btn_single_select); Button btnWaiting = findViewById(R.id.btn_waiting); Button btnLoading = findViewById(R.id.btn_loading); Button btnInput = findViewById(R.id.btn_input); Button btnMyStyle = findViewById(R.id.btn_my_style); btnTwo.setOnClickListener(this); btnThree.setOnClickListener(this); btnList.setOnClickListener(this); btnMultiSelect.setOnClickListener(this); btnSingleSelect.setOnClickListener(this); btnWaiting.setOnClickListener(this); btnLoading.setOnClickListener(this); btnInput.setOnClickListener(this); btnMyStyle.setOnClickListener(this); } @Override public void onClick(View view) { int id = view.getId(); switch (id) { case R.id.btn_two://最普通dialog showTwo(); break; case R.id.btn_three://三个按钮dialog showThree(); break; case R.id.btn_list://列表样式dialog showList(); break; case R.id.btn_multi_select://多选dialog showMultiSelect(); break; case R.id.btn_single_select://单选dialog showSingSelect(); break; case R.id.btn_waiting://等待dialog showWaiting(); break; case R.id.btn_loading://加载进度dialog showLoading(); break; case R.id.btn_input://输入框dialog showInput(); break; case R.id.btn_my_style://自定义dialog showMyStyle(); break; default: } } /** * 两个按钮的 dialog */ private void showTwo() { builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("最普通dialog") .setMessage("我是最简单的dialog").setPositiveButton("确定(积极)", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //ToDo: 你想做的事情 Toast.makeText(MainActivity.this, "确定按钮", Toast.LENGTH_LONG).show(); } }).setNegativeButton("取消(消极)", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //ToDo: 你想做的事情 Toast.makeText(MainActivity.this, "关闭按钮", Toast.LENGTH_LONG).show(); dialogInterface.dismiss(); } }); builder.create().show(); } /** * 三个按钮的 dialog */ private void showThree() { builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("三个按钮dialog") .setMessage("三个按钮dialog").setPositiveButton("确定(积极)", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //ToDo: 你想做的事情 Toast.makeText(MainActivity.this, "确定按钮", Toast.LENGTH_LONG).show(); } }).setNeutralButton("你猜(中立)", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(MainActivity.this, "你猜按钮", Toast.LENGTH_LONG).show(); } }).setNegativeButton("取消(消极)", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { //ToDo: 你想做的事情 Toast.makeText(MainActivity.this, "关闭按钮", Toast.LENGTH_LONG).show(); dialogInterface.dismiss(); } }); builder.create().show(); } /** * 列表 dialog */ private void showList() { final String[] items = {"item 1", "item 2", "item 3", "item 4", "item 5", "item 6"}; builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher) .setTitle("列表dialog") .setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(MainActivity.this, "你点击的内容为: " + items[i], Toast.LENGTH_LONG).show(); } }); builder.create().show(); } /** * 多选 dialog */ private void showMultiSelect() { final List<Integer> choice = new ArrayList<>(); final String[] items = {"多选1", "多选2", "多选3", "多选4", "多选5", "多选6"}; //默认都未选中 boolean[] isSelect = {false, false, false, false, false, false}; builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher) .setTitle("多选dialog") .setMultiChoiceItems(items, isSelect, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i, boolean b) { if (b) { choice.add(i); } else { choice.remove(i); } } }).setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { StringBuilder str = new StringBuilder(); for (int j = 0; j < choice.size(); j++) { str.append(items[choice.get(j)]); } Toast.makeText(MainActivity.this, "你选择了" + str, Toast.LENGTH_LONG).show(); } }); builder.create().show(); } private int choice; /** * 单选 dialog */ private void showSingSelect() { //默认选中第一个 final String[] items = {"单选1", "单选2", "单选3", "单选4", "单选5", "单选6"}; choice = -1; builder = new AlertDialog.Builder(this).setIcon(R.mipmap.ic_launcher).setTitle("单选列表") .setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { choice = i; } }).setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { if (choice != -1) { Toast.makeText(MainActivity.this, "你选择了" + items[choice], Toast.LENGTH_LONG).show(); } } }); builder.create().show(); } /** * 圆圈加载进度的 dialog */ private void showWaiting() { progressDialog = new ProgressDialog(this); progressDialog.setIcon(R.mipmap.ic_launcher); progressDialog.setTitle("加载dialog"); progressDialog.setMessage("加载中..."); progressDialog.setIndeterminate(true);// 是否形成一个加载动画 true表示不明确加载进度形成转圈动画 false 表示明确加载进度 progressDialog.setCancelable(false);//点击返回键或者dialog四周是否关闭dialog true表示可以关闭 false表示不可关闭 progressDialog.show(); } /** * 带有进度的 dialog */ private void showLoading() { final int MAX_VALUE = 100; progressDialog = new ProgressDialog(this); progressDialog.setProgress(0); progressDialog.setTitle("带有加载进度dialog"); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMax(MAX_VALUE); progressDialog.show(); new Thread(new Runnable() { @Override public void run() { int progress = 0; while (progress < MAX_VALUE) { try { Thread.sleep(100); progress++; progressDialog.setProgress(progress); } catch (InterruptedException e) { e.printStackTrace(); } } //加载完毕自动关闭dialog progressDialog.cancel(); } }).start(); } /** * 一个输入框的 dialog */ private void showInput() { final EditText editText = new EditText(this); builder = new AlertDialog.Builder(this).setTitle("输入框dialog").setView(editText) .setPositiveButton("读取输入框内容", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(MainActivity.this, "输入内容为:" + editText.getText().toString() , Toast.LENGTH_LONG).show(); } }); builder.create().show(); } /** * 原生自定义 dialog */ private void showMyStyle() { @SuppressLint("InflateParams") View view = LayoutInflater.from(this).inflate(R.layout.layout_test, null); final EditText etUsername = view.findViewById(R.id.et_username); final EditText etPassword = view.findViewById(R.id.et_password); builder = new AlertDialog.Builder(this).setView(view).setTitle("自定义dialog——登录").setIcon(R.mipmap.ic_launcher) .setPositiveButton("登录", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Toast.makeText(MainActivity.this, "账号: " + etUsername.getText().toString() + " 密码: " + etPassword.getText().toString() , Toast.LENGTH_LONG).show(); } }); builder.create().show(); } } 3、介绍一些好用的第三方dialog库 1、material-dialogs 2、FlycoDialog_Master

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册