首页 文章 精选 留言 我的

精选列表

搜索[心智成长],共7676篇文章
优秀的个人博客,低调大师

Java项目经验——程序员成长的钥匙

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1、掌握项目开发的基本步骤 2、具备极强的面向对象的分析与设计技巧 3、掌握用例驱动、以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法! 关于基础tb知识: 你可以看看这些名词或知识点,看是否能说出个一二三四来。 JavaSE —-基本语法、数据类型、操作符等:int、long、Integer、Long、if、else、for、while —-面向对象:class(类)、Object(对象)、instance(实例)、state(状态)、behavior(行为)、field、method、new、可见性(访问控制)、attribute、property、package、import、static variable、class variable、instance variable、heap、method area、stack、GC(垃圾回收)、override、overload、对象转型(casting)、多态、this、super —-异常处理:理解编译期错误和运行期错误的区别、Exception、RuntimeException、checked exception、unchecked exception、try、catch、finally、throw new XXXException、throws XXXException、异常处理的基本原则 —-数组与集合:数组的定义和使用方法、Collection、List、Set、Map、ArrayList、HashSet、HashMap、Iterator、equals、hashCode、Comparable、Comparator —-常用类:String、intern、常量池、StringBuffer、java.util.Date、SimpleDateFormat、Regex(正则表达式) —-反射机制:Class、Method、Field、invoke、newInstance、BeanUtils(apache-commons)、PropertyUtils(apache-commons) —-输入输出流:InputStream、OutputStream、Reader、Writer、Adapter设计模式与原始流类、Decorator设计模式与包装流类、对象序列化和反序列化 —-多线程:Thread、Runnable、sleep、wait、notify、synchronized、lock Servlet和JSP —-HttpServlet、doGet、doPost、HttpServletRequest、HttpServletResponse、request.getParameter()、request.setAttribute()、request.getAttribute()、request.getSession()、ServletContext、Filter、web.xml、tomcat、forward与redirect、http协议的无状态性、cookie、JSP Scope Object、、 HTML与JavaScript —-你需要能够理解常见的网页标签、理解在网页中引入JavaScript的方法、以及JavaScript的基本语法与使用方法 以上,就是你进一步学习Java所必备的基本知识。特别是一些个专业术语和名词,看到这些名词,如果你像看到亲爹一样亲切,那么说明你对Java的基础知识就很熟悉了。 接下来是SSH: 对于初学者来说,这三大框架被赋予了太多神秘的色彩,似乎它们是重中之重的知识!但是对于拥有多年java开发经验的专业技术人员来说,对于那些Java牛人来说,却对这三大框架不太感冒!难道它们不重要吗? 现在很多企业都在用这三大框架,所以很多企业也把掌握这三大框架作为招聘的必备条件。不可否认的是,也有很多大型企业没有用这三大框架,这些企业经过多年发展,自身已经有一定的技术积累,也形成了自己独特的技术框架体系。这三大框架既可以说很重要,也可以说不重要。 说重要的原因在于:这三大框架对JavaEE开发中所存在的普遍的问题,提供了优美的解决方案,它们蕴含了这个行业中最NB的开发人员的努力和想法,所以,学习这三大框架,你就可以窥探到这些处于技术巅峰的牛人们究竟对一个问题是怎么想的,通过一种什么样的设计思路去解决问题的。所以,对于你来说,你没有太多项目开发的经验,经验是什么?经验就是你知道可能会遇到哪些问题,针对哪个问题可以有哪些解决方法,在某个情景下,哪种解决方法是较好的,哪种方法不太好等等!如果你没做过什么项目,你根本就不会去意识到你可能会遇到哪些问题,而这些问题往往又是非常关键的!解决得不好,会影响到你的程序的稳定性、可扩展性等等!三大框架就给初学者提供了了解你以后可能会遇到哪些问题,以及针对这些问题的解决方案! 当你了解了这三大框架为什么是重要的,那么你也就能理解,为什么这三大框架也可以说是不重要的。如果你曾经开发过很多项目,你碰到了各种各样的问题,凭着你的技术功底,逐个击破了这些问题,在这些人眼里,三大框架(是不是还有N个框架?呵呵)都是浮云! 你属于哪一种人呢?如果你没有太多项目开发经验,那么三大框架对于你来说就是非常重要的!而且,由此你也知道了该怎么去学这三大框架。对于三大框架的学习而言,着力点在于给你展示问题,并触发你自己主动的思考,我们鼓励你提出自己的想法,也许你的想法很白痴,但那毕竟是你自己的想法,如果你不知道牛人的想法,那你怎么知道自己的想法是很白痴的呢?在这种思想的碰撞过程中,你就会逐渐提高自己!所以,三大框架学完之后,你不应该只是看到一大堆配置文件,你不应该只是看到了一些Action,一些Service,一些映射文件,你不应该只知道session.save/update/delete,你不应该只是知道struts2中有一堆interceptor,你不应该只是看到一堆jar包…… 如果你只是知道拷贝一堆jar包,定义一系列配置文件之后,SSH三大框架就能够运行起来了,也可以给你干活了,那么,很悲哀的是,你仍然没有掌握三大框架的精粹!请你回答以下问题: Struts2: 为什么每次请求都要创建一个Action对象? ModelDriven拦截器的配置中refreshModelBeforeResult解决了什么问题? 为什么在web.xml中配置的StrutsPrepareAndExecuteFilter要过滤所有的请求? 请你给我谈谈ValueStack? Struts2是如何实现MVC设计模式的? Spring: 你为什么要用Spring? 请你聊一聊IOC/DI?java大神技术交流学习 什么是声明式的事务管理?为什么要使用声明式的事务管理?Spring如何实现声明式的事务管理? 把spring和hibernate集成,定义事务管理特性的时候,为何要将除了添加、删除、更新操作之外的方法,即主要执行查询任务的方法定义为read-only? Hibernate: 请你谈谈你对OR映射的理解? 很多人说Hibernate不适合大项目,性能有问题,你是如何理解的? Hibernate为什么一定要定义一个数据库标识? 为什么Hibernate建议你的实体类实现hashCode和equals方法? 谈谈你对Hibernate实体类中的数据库标识与数据库主键之间关系的认识? 谈谈你对Hibernate关联映射与数据库外键之间关系的认识? 调用session.save()方法,hibernate一定会发出insert语句吗?谈谈你的理解 调用session.update()方法,hibernate一定会发出update语句吗?谈谈你的理解 请你聊一下以下名词、概念或用法:lazy、lazy=”extra”、inverse、fetch、fetch=”join”、fetch=”subselect”、batch-size 配置了lazy=”true”一定会实现懒加载吗? 请你谈谈Hibernate中的“N+1”问题 请你谈谈Hibernate有哪些最佳实践? 以上并非SSH中全部重点的问题,但它们能考察你能否灵活运用SSH框架!如果你能深刻理解这些问题,再配以合适的实战项目训练,你也会逐渐成为牛人! 最后是项目开发能力: 不管你是学Java还是别的技术,你的根本目的在于给客户创造价值!否则,你下大力气学习的东西,随着技术的进步和更新,很快就会过时!所以,技术的核心在于用技术创造有价值的成果!也就是说,客户需要什么,你就要用技术把客户需要的东西给他造出来!一个公司之所以要用各种福利条件极力挽留你,是因为你能够给公司带来极高的利益!那么,你有什么可以给公司利用的呢?公司最看重你的哪方面的能力呢? 做项目需要的能力很多,其中最核心最基础的就是建模能力(现在最主流的就是面向对象建模!)。什么是建模能力呢? 我给大家一个面试题: 一个保险公司的保险卡管理模块:销售人员领取保险卡信息(保险卡数量、卡号、领取日期),然后直接销售给客户,销售完毕后,将保险卡信息录入保险公司系统内部(销售人员信息、购买人信息、购买的保险卡数量、卡号等),客户登录保险公司网站激活保险卡,需要填写(保险卡卡号、激活密码、被保险人信息、受益人信息) 要求就是:如果这个模块交给你来做,你要怎么做?你要解决哪些问题?你可否画个图,给我描述一下你的想法是什么吗? 这只是一个面试题而已,因为只有简单几句话,所以我把它放到这里,让大家感受一下所谓建模要解决什么问题。而业务领域的问题实在是太多了!也许一个几十上百页的需求文档才能把某个业务领域的问题描述清楚,而你的职责就是要把它们实现出来! 某个公司要开发一个考勤管理系统,要求与现有的人力资源系统对接,你是主要的技术负责人,那么,你要做哪些工作呢? 某ERP项目要实现一个排班管理模块java大神技术交流学习,交给你去完成,你如何去完成呢? 不要抱怨项目经理给你的信息太少(只有几句话),不要抱怨客户没有描述清楚他们的需求……你的价值就在于理顺所有的问题 tb ,用各种手段获得你想要的信息,按照一定的思路汇总,并在特定的时间里逐个解决它! 你应该意识到学Java不是一个坦克大战、一个网络飞车、一个CMS、一个DRP、一个OA那么简单,你不要沉迷于那些技术细节(虽然也是有必要的,但不要转牛角尖),不要满足于实现了CRUD式的项目需求(虽然这是基础中的基础),在你的前方,永远有一个目标在那里,需要你去努力追赶! 今后你将面对更加繁杂的需求,你学习项目的唯一目的,就是:学习如何将需求转化为实现,如何对需求进行分析,如何建立概念模型,如何理顺各种概念之间的关系,如何进行设计,如何选择合适的技术来实现你的设计方案,如何对你的实现进行测试,如何解决你所遇到的形形色色的问题(性能、需求变更等)。当你真正到公司里面从事了几年开发之后,你就会同意我的说法! 利用Java找工作,需要的就是项目经验,项目经验就是理解项目开发的基本过程,理解项目的分析方法,理解项目的设计思路,理解项目的实现技巧,理解项目的测试方法,理解项目中各种问题的解决方案!!! 所以,你该清楚你的目标了! 工作一到五年的程序员朋友面对目前的技术无从下手,感到很迷茫可以加群744677563,里面有阿里Java高级大牛直播讲解知识点,分享知识,课程内容都是各位老师多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!

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

Android菜鸟的成长笔记(27)——ViewPager的使用

ViewPager是Android 3.0以上能够使用的API。 一、ViewPager能干什么? 1、微信5.0中连带滑动用ViewPager能够轻松实现。 2、实现相似于新浪微博的导航引导界面。 3、实现其它导航或菜单。 二、ViewPager的使用 1、加入布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> </LinearLayout> 2、载入要显示的布局文件(View) LayoutInflater lf = getLayoutInflater().from(this); view1 = lf.inflate(R.layout.layout_0, null); view2 = lf.inflate(R.layout.layout_1, null); view3 = lf.inflate(R.layout.layout_2, null); 3、创建View集合 mListViews = new ArrayList<View>(); mListViews.add(view1); mListViews.add(view2); mListViews.add(view3); 4、创建PagerAdapter ViewPager的适配器是PagerAdapter,要实现PagerAdapter至少要实现以下方法: (1)instantiateItem(ViewGroup, int) //加入 (2)destroyItem(ViewGroup, int, Object) //删除 (3)getCount() (4)isViewFromObject(View, Object) private class MyPageAdapter extends PagerAdapter { private List<View> mListViews; public MyPageAdapter(List<View> mListViews) { this.mListViews = mListViews; } /** * 删除页卡 */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(mListViews.get(position)); } /** * 实例化页卡 */ @Override public Object instantiateItem(View container, int position) { ((ViewPager)container).addView(mListViews.get(position)); return mListViews.get(position); } /** * 返回页卡的数量 */ @Override public int getCount() { return mListViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; //官方提示这样写 } } 5、配置适配器 mViewPager.setAdapter(new MyPageAdapter(mListViews)); 所有代码例如以下: package com.example.viewpagetest; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; public class MainActivity extends Activity { private List<View> mListViews; private View view1; private View view2; private View view3; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = (ViewPager) findViewById(R.id.viewpager); //载入要显示的选项卡 LayoutInflater lf = getLayoutInflater().from(this); view1 = lf.inflate(R.layout.layout_0, null); view2 = lf.inflate(R.layout.layout_1, null); view3 = lf.inflate(R.layout.layout_2, null); mListViews = new ArrayList<View>(); mListViews.add(view1); mListViews.add(view2); mListViews.add(view3); mViewPager.setAdapter(new MyPageAdapter(mListViews)); } private class MyPageAdapter extends PagerAdapter { private List<View> mListViews; public MyPageAdapter(List<View> mListViews) { this.mListViews = mListViews; } /** * 删除页卡 */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(mListViews.get(position)); } /** * 实例化页卡 */ @Override public Object instantiateItem(View container, int position) { ((ViewPager)container).addView(mListViews.get(position)); return mListViews.get(position); } /** * 返回页卡的数量 */ @Override public int getCount() { return mListViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; //官方提示这样写 } } } 各个页面代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:text="1" android:gravity="center" android:textSize="120sp" android:textColor="#33b5e5" /> </LinearLayout> 执行效果: 三、实现微信的菜单联动 android.support.v4.view包中的接口和类例如以下: 从上面图片中我们能够看到PagerTabStrip和PagerTitleStrip 从字面意思上理解,PagerTabStrip是能够点击的导航选项卡,而PagerTitleStrip是不能互动的(点击)的导航选项卡。 以下我们改动布局文件例如以下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <android.support.v4.view.PagerTabStrip android:id="@+id/pagertab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top"/> </android.support.v4.view.ViewPager> </LinearLayout> layout_gravity能够设置Tab的位置 改动MainActvity mTitleList = new ArrayList<String>(); mTitleList.add("聊天"); mTitleList.add("发现"); mTitleList.add("通讯录"); 在PagerAdapter中加入以下代码: @Override public CharSequence getPageTitle(int position) { return mTitleList.get(position); } 贴出所有代码,例如以下: package com.example.viewpagetest; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; public class MainActivity extends Activity { private List<String> mTitleList; private List<View> mListViews; private ViewPager mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPager = (ViewPager) findViewById(R.id.viewpager); //载入要显示的选项卡 LayoutInflater lf = getLayoutInflater().from(this); View view1 = lf.inflate(R.layout.layout_0, null); View view2 = lf.inflate(R.layout.layout_1, null); View view3 = lf.inflate(R.layout.layout_2, null); mListViews = new ArrayList<View>(); mListViews.add(view1); mListViews.add(view2); mListViews.add(view3); mTitleList = new ArrayList<String>(); mTitleList.add("聊天"); mTitleList.add("发现"); mTitleList.add("通讯录"); mViewPager.setAdapter(new MyPageAdapter(mListViews)); } private class MyPageAdapter extends PagerAdapter { private List<View> mListViews; public MyPageAdapter(List<View> mListViews) { this.mListViews = mListViews; } /** * 删除页卡 */ @Override public void destroyItem(View container, int position, Object object) { ((ViewPager) container).removeView(mListViews.get(position)); } /** * 实例化页卡 */ @Override public Object instantiateItem(View container, int position) { ((ViewPager)container).addView(mListViews.get(position)); return mListViews.get(position); } /** * 返回页卡的数量 */ @Override public int getCount() { return mListViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; //官方提示这样写 } /** * 设置Tab */ @Override public CharSequence getPageTitle(int position) { return mTitleList.get(position); } } } 执行效果: 上面尽管有了Tab,并能随着页面的切换改变,可是这个并非我们要达到的效果。以下我们自己做一个静态的Tab底部和一个动画来实现。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#eeeeee" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="32.0dip" android:background="#eeeeee" > <TextView android:id="@+id/text1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="聊天" android:textColor="#000000" android:textSize="16.0dip" /> <TextView android:id="@+id/text2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="发现" android:textColor="#000000" android:textSize="16.0dip" /> <TextView android:id="@+id/text3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0" android:gravity="center" android:text="通讯录" android:textColor="#000000" android:textSize="16.0dip" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/a"/> <ImageView android:layout_width="match_parent" android:layout_height="1px" android:background="#cccccc"/> <android.support.v4.view.ViewPager android:id="@+id/vPager" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_gravity="center" android:layout_weight="1.0" android:flipInterval="30" android:background="#ffffff" android:persistentDrawingCache="animation" /> </LinearLayout> package com.example.wuye001; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private ViewPager viewPager;//页卡内容 private ImageView imageView;// 动绘图片 private TextView textView1,textView2,textView3; private List<View> views;// Tab页面列表 private int offset = 0;// 动绘图片偏移量 private int currIndex = 0;// 当前页卡编号 private int bmpW;// 动绘图片宽度 private View view1,view2,view3;//各个页卡 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); InitImageView(); InitTextView(); InitViewPager(); } private void InitViewPager() { viewPager=(ViewPager) findViewById(R.id.vPager); views=new ArrayList<View>(); LayoutInflater inflater=getLayoutInflater(); view1=inflater.inflate(R.layout.layout_0, null); view2=inflater.inflate(R.layout.layout_1, null); view3=inflater.inflate(R.layout.layout_2, null); views.add(view1); views.add(view2); views.add(view3); viewPager.setAdapter(new MyViewPagerAdapter(views)); viewPager.setCurrentItem(0); viewPager.setOnPageChangeListener(new MyOnPageChangeListener()); } /** * 初始化头标 */ private void InitTextView() { textView1 = (TextView) findViewById(R.id.text1); textView2 = (TextView) findViewById(R.id.text2); textView3 = (TextView) findViewById(R.id.text3); textView1.setOnClickListener(new MyOnClickListener(0)); textView2.setOnClickListener(new MyOnClickListener(1)); textView3.setOnClickListener(new MyOnClickListener(2)); } /** * 初始化动画,这个就是页卡滑动时。以下的横线也滑动的效果,在这里须要计算一些数据 */ private void InitImageView() { imageView= (ImageView) findViewById(R.id.cursor); bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a).getWidth();// 获取图片宽度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int screenW = dm.widthPixels;// 获取分辨率宽度 offset = (screenW / 3 - bmpW) / 2;// 计算偏移量 Matrix matrix = new Matrix(); matrix.postTranslate(offset, 0); imageView.setImageMatrix(matrix);// 设置动画初始位置 } /** * * 头标点击监听 3 */ private class MyOnClickListener implements OnClickListener{ private int index=0; public MyOnClickListener(int i){ index=i; } public void onClick(View v) { viewPager.setCurrentItem(index); } } public class MyViewPagerAdapter extends PagerAdapter{ private List<View> mListViews; public MyViewPagerAdapter(List<View> mListViews) { this.mListViews = mListViews; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mListViews.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mListViews.get(position), 0); return mListViews.get(position); } @Override public int getCount() { return mListViews.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } } public class MyOnPageChangeListener implements OnPageChangeListener{ int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量 int two = one * 2;// 页卡1 -> 页卡3 偏移量 public void onPageScrollStateChanged(int arg0) { } public void onPageScrolled(int arg0, float arg1, int arg2) { } public void onPageSelected(int arg0) { /*两种方法。这个是一种,以下另一种。显然这个比較麻烦 Animation animation = null; switch (arg0) { case 0: if (currIndex == 1) { animation = new TranslateAnimation(one, 0, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, 0, 0, 0); } break; case 1: if (currIndex == 0) { animation = new TranslateAnimation(offset, one, 0, 0); } else if (currIndex == 2) { animation = new TranslateAnimation(two, one, 0, 0); } break; case 2: if (currIndex == 0) { animation = new TranslateAnimation(offset, two, 0, 0); } else if (currIndex == 1) { animation = new TranslateAnimation(one, two, 0, 0); } break; } */ Animation animation = new TranslateAnimation(one*currIndex, one*arg0, 0, 0);//显然这个比較简洁,仅仅有一行代码。 currIndex = arg0; animation.setFillAfter(true);// True:图片停在动画结束位置 animation.setDuration(300); imageView.startAnimation(animation); } } } 执行效果: 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5094697.html,如需转载请自行联系原作者

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

从Workbuddy成长计划看AI成长历程

AI这段时间的变化我们都看在眼里,相信接触AI的人都知道,AI这两年的变化其实是非常快的。从只有国外AI才是好的,到国内的国产AI逐渐的能够去在日常的生活场景甚至工作场景中熟练运用,这中间发生了太多的事情。而我们和AI的关系,以及我们和AI之间的互动也发生了根本性的变化。那么要把这个东西说清楚,我们需要先聊一下一些前置的话题。

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

BabyLog 宝贝成长记录工具发布全新的 2.0 版本

一晃孩子都要上初中了,当初孩子刚出生的时候,我只是想记录一下当爸爸的心路历程,没想到一下子就过去了10年. 此间,程序重构过多次,但是唯一不变的就是那些记录下来的数据和相片. 由于程序代码老旧,有些新用户搭建环境困难导致程序无法启动,因此重构了原有的代码. 全新的BabyLog2.0 发布了! 新版本功能: 1. 可以记录多个宝贝的日志和健康数据了,每个宝贝健康数据图表可以分别显示. 2. 更方便的图片上传功能,最多一次可以上传9张图片. 3. 后台的权限管理更完善了,依托于miniadmin,实现了rbac的权限管理. 4. 前后端可分离,也可以不分离的模式,根据需求自行选择.实现了一键启动系统,简化了程序的配置. 5. 系统首次启动会创建一些数据,方便用户第一次使用. 6.优化了数据库的数据表结构. 7. 修复了一些历史遗留的bug. 真诚的希望有孩子的和打算生孩子的程序员们来一起维护这个程序,有些东西真的需要记下来,不然回头看去都是模糊的回忆。 任凭时光匆匆,记录点点滴滴。以上记录与2022-12-29

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

学会战斗中成长 运用网络中的利器

网络硝烟连天不休,网管救急一马当先。冲锋于各大网络“战事”最前线的网管员,他们对于这一职业的思考如何呢?让我们来关注这一群体的生活麻辣烫。 当前,随着越来越多的企业对it为业务提供持续高效支撑的要求越来越迫切,业务服务管理(Business Service Management,BSM)已逐渐成为it管理领域的一个新的热点。业务服务管理弥补了传统it管理理念缺乏对业务和it关联关系问题的思考,明确提出了保持业务目标和it目标相统一,构建业务和it的沟通平台。通过业务视角传递it价值的观点。 无法统一协调,导致问题不能及时解决随着国家大部委制的整合进程逐渐加快,问题暴露得更加明显。原本独立的两套IT系统,现在要完成协同办公,多部门统一协调管理则面临不小的挑战。当两个部委在业务流程上有重合时,就难免发生推卸责任、纠缠不清的扯皮事件。诸如不能上网这样的简单问题,很可能会牵涉到几个部门之间配合。而问题出现时,A部门找B部门反馈,B部门又找C部门处理,C可能说是D部门的问题;信息中心主任找科长,科长找科员,科员找支持,这样导致很简单的问题无法得到及时有效的处理,影响的不仅仅是业务本身,部门之间也会怨声载道。 问题不仅在政府行业中出现,很多企业也会面临。根本原因是各部门之间无法形成统一协调的IT系统管理,问题得不到有效的跟踪,也就谈不上及时解决。现在,如何实现各部门之间的统一协调,以及如何对问题进行有效的跟踪和量化的管理已经成为政府和企业不得不着手解决的难题。 对人的依赖,导致人员变更后的运维问题 在网络运维管理中,人的因素成为企业急需解决的第三个问题。有人会问,为什么是人呢?我们都清楚地知道人可以解决问题,这是人在网络运维管理中起到的重要作用,也是毋庸置疑的。但问题也随之而来,如果一个熟练运维人员的岗位发生变更,当问题再出现时,就很难得到迅速处理。即使会有新人继续前人的工作,但他却无法继承前人的运维经验,这成为企业运维成本增加、重复投资的重要原因。 对人的依赖越大,网络管理中的不稳定因素就越多。在企业的IT系统中,如何减少对人的依赖,避免出现因人员变更而导致运维无法有效进行,是企业IT部门面临的重大考验。 准确地反应网络故障 平时,当我们感觉网络速度实在太慢时,才会去和网管联系,而且处理十分被动。因此,网管软件必须能迅速反映问题,还要有一定推理故障根源的能力。此外,还将专家系统、人工智能系统、神经元技术和网络故障和性能管理相结合,使网管系统逐步具备分析决策能力。 IT与业务需要关联吗 随着企业的业务不断扩展,企业的IT基础架构和应用也随之在不断的发展,一旦不能很好的将IT基础架构和应用进行有效的管理和量化,就很容易混乱的局面。 我们投入了大量的人力物力在基础设施和IT应用上,却无法将IT投入和业务的支持建立量化的关系,如何才能更好的管理基础设施和应用,最终减少投诉,变被动为主动呢?是时候改变这一切了!那是否有软件能够监控基础设施和应用,也能够将复杂的IT设施转化为简单的业务视图,让我们从业务的角度,保障IT部门提供稳定可靠的服务。 随着IT基础架构的不断扩充,网络、系统和应用也在向超出管理员的控制范围方向发展,运维中的问题也越来越多。 如何从众多的问题中,找到最优先要处理的事件?网管软件中的服务展现可以帮您做到这些。 同时业务服务管理功能更是从整个业务系统的大局着眼,引入服务水平协议 (SLA)机制,使用在线时间比率、平均故障恢复时间、平均无故障时间等衡量整个服务的运行水平。改被动局部维护为主动宏观管理,致力于提高企业整体运营品质。克服了重监测轻管理,重硬件轻软件,重 IT 元素数据轻业务品质的弊病。 由于可见,IT与业务的关联是十分重要的,如果将IT与业务区别对待,那么对于企业来说,业务就很容易出现混乱的局面。 网管软件关联IT与业务的服务管理 我们投入了大量的人力物力在基础设施和IT应用上,却无法将IT投入和业务的支持建立量化的关系,如何才能更好的管理基础设施和应用?一款好的网管软件能够监控基础设施和应用,也能够将复杂的IT设施转化为简单的业务视图,使我们从IT服务的角度,保障IT部门提供稳定可靠的服务。 IT服务由主机、网络、应用组成,一旦某个组件出现问题,问题就会反应在业务服务上面。用户(包括业务部门)只关心提供给他们所使用的IT服务,服务是不是宕了,还是服务为什么这么慢,而不关心具体的技术细节。 以服务视角来管理IT 很多企业IT部门划分为几个组,各自管理网络、主机以及应用,但是一旦发生问题,对于业务部门来说是一个业务服务的中断,不管是硬件故障,网络问题或者应用宕了,业务部门是完全不清楚什么地方出了问题。现在,IT部门可以把网络、主机、应用组成一个服务,然后以服务为中心,展示出服务和网络、主机、应用的关联关系,以及体现出IT部门对于业务部门的价值。 新一代的网络管理系统,已开始从面向网络设备的管理向面向网络业务的管理过度。这种网管思想把网络服务、业务作为网管对象,通过实时监测与网络业务相关的设备、应用,通过模拟客户实时测量网络业务的服务质量,通过收集网络业务的业务资料,实现全方位、多视角监测网络业务运行情况的目的,从而实现网络业务的故障管理、性能管理和配置管理。 本文转自赖永锋51CTO博客,原文链接:http://blog.51cto.com/mochasoft/252542 ,如需转载请自行联系原作者

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

MaxCompute2.0助力众安保险快速成长

摘要:2017云栖大会阿里云大数据计算服务(MaxCompute)专场,众安保险数据总监王超群带来MaxCompute助力众安保险方面的演讲。本文主要从MaxCompute优势开始谈起,进而谈及大数据能够为公司运营带来的好处,最后重点分析了众安保险的数据平台建设,包括任务调度、元数据和数据质量监控等。 以下是精彩内容整理: 众安保险作为国内第一家互联网公司,我们从创立之初计算平台就使用MaxCompute。 为什么会选择MaxCompute? 成立之初我们也在自建平台和MaxCompute上作出了选择,我们主要从五方面考虑:健壮性、与应用系统交互、扩展性、强数据安全和低成本。 健壮性:7*24的服务能力、异常恢复时长; 与应用系统交互:数据源的获取与数据输出效率和成本; 扩展性:当数据成倍增长时,计算能力弹性; 数据安全:数据异常攻击防护,提

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

物联网产业7年 变局中不断成长

物联网产业的媒体联动原素创办者李晓妍自2011年开始从事物联网媒体以来,目睹了中国物联网产业在最初这几年的跌宕起伏。此文就是她对物联网产业7年变局的见证。 翻阅物联网的相关资料,基本都显示“物联网”这一概念,是1995年比尔·盖茨在其《未来之路》一书中提出的。但是,物联网的“产业化概念”却起源于中国,这一点,想必全世界都会认同。 2009年8月,中国前总理温家宝在一次无锡视察中,听取了无锡物联网产业研究院负责人对“物联网产业化”的一些建议后,表示了认同,并提出了三条具体实施建议。此后,让“物联网”从学术概念走向了产业概念。无锡,也成为当之无愧的物联网产业发祥地。 截至2016年8月,物联网产业化概念整整走过了7年的历程。婚姻中有“7年之痒”一说,可以理解为7年是一个磨合期,跨过了这道坎,可能就离圆满结局更近一步;跨不过,或许就要一拍两散了。有时候感觉,这竟是对中国物联网产业发展历程的绝佳映射。因为中国物联网产业过去7年的发展,用“迂回曲折”已不足以形容。 物联网给无锡带来的喜与悲 首先,来说说物联网产业的发祥地——无锡。可以说,很多早期的物联网从业者,对无锡是很有感情的,也包括我。因为无锡是大部分从业者认知物联网的开始。但是应该说,无锡成就了物联网,物联网也成就了无锡;同时,无锡毁了物联网,物联网也毁了无锡。这个怎么解释呢?在中国,只要知道物联网的人,都知道它的发祥地是无锡,但接着就会说:“无锡代表的是传统物联网”,尤其是2014年以后参与到物联网产业的创业者们,更是表示“一提物联网,大家首先想到的就是智能抄表、RFID、追踪溯源等,所以我们更愿意提万物互联”。这可能就是作为开山鼻祖必须背的“黑锅”吧! 为什么说是黑锅呢?因为作为中国物联网产业的发祥地,无锡承担了很大一部分的“产业化试验”工作和责任。但是,当时很多产业化的条件都不成熟。 第一,物联网的技术路线还不清晰。是三层架构,还是四层架构;是类似于美国的M2M,仅包含传感层,还是包含了公网及更大范围的信息化系统集成等依然在争论中。 第二,没有清晰切入点,所以干脆“囫囵吞枣”。也就是说,大部分从业者都知道物联网带来的终极体验是:所有人和物都能够通过网络无障碍互联互通,却不知道该从哪儿下手。于是,就把想象中的这张终极大网,切分成无数个小系统,进行试验,名为物联网产业示范试点工程。中国最初的三个物联网示范工程——感知市民中心、智能机场安检等,便是由无锡于2010年1月推行实施的。此后,这一举措还被中央采纳,在全国推广,并且一直延续至今年。 第三,物联网的很多支撑技术和产品尚不成熟。比如传感器技术,当时智能传感器的概念在中国刚刚开始,掌握MEMS工艺的中国本土传感器企业寥寥无几。再比如短距离无线传输技术,RFID、NFC、ZigBee、Bluetooth、Wifi、PLC等都有参与其中,并且都曾在不同时段“艳压”过其它技术,但各自都有很大局限。像RFID的成本与应用场景、ZigBee的标准不统一、Wifi的高功耗,并且当时Wifi刚刚在中国解禁、PLC的干扰性大等问题,无一不对物联网产业的发展造成阻碍。再比如IT技术的云计算化升级也处于初期。自身都还处于混乱中,更别说支持物联网的发展了。还有当时大数据的概念还处于学术阶段,因为其技术基础Hadoop的发展才刚刚开始。 第四,大部分从业者的急于求成。2008金融海啸过后,中国企业太想快速找到下一个经济增长点。因而,当时房地产行业疯狂发展,中国的房价开涨都始于2008年。在那样的环境影响下,很多物联网从业者都希望物联网产业也能够像房地产一样,可以让其“一夜暴富”。这从一定程度上让物联网产业走上了一条不健康的发展路线。 而这些条件不成熟造成的后果就是:1)物联网产业没有像大家期待的那样,瞬间爆发;2)无锡没有像大家期许的那样,瞬间爆发;3)物联网企业,没有像自己想象的那样,瞬间爆发。而无锡这座——曾经因物联网而风光无限的城市,承担了这个后果的部分原罪。并且,它当时的付出,比如通过“530计划”为物联网创业者和企业提供的各种扶持,似乎都成了笑话。 不过,无锡并没有因此就放弃物联网产业。2013年以后,无锡看似不再大造声势了,但是却依然在暗暗发力,更或者是在向着更加扎实的方向探索。尤其是2016年,在中国被称为真正的“物联网产业发展之年”,无锡不仅提出了打造“物联网小镇”的行动方案,而且将第七届物联网博览会升级为“世界物联网博览会”,再次成为物联网产业各界集聚的核心。 2009-2013年:政府主导下的实验室阶段 其次,再看看这7年间,中国物联网产业的进阶历程。我一直比较倾向于将其分为3个阶段。第一个阶段(2009-2013年),可以称为“政府主导下的实验室”阶段,也就是无锡占据绝对主导地位的阶段。这个阶段又可以分为两个小节。 第一节是2009-2011年,在国务院指导下,中央各部委,及各省市纷纷出台如物联网专项基金扶持、物联网示范试点工程、税收优惠等“推动物联网产业发展”的政策。其中的“物联网应用试点示范工程(项目)”,应该说为物联网的产业化从设想到落地提供了试验田。据不完全统计,在2010年至2016年间,中央各部委及地方省市规划及打造的物联网示范试点工程逾千个,涉及项目过万个。当然,这着实养活了一批物联网企业,尤其在早期。记得2012年走访一家物联网企业的时候,该公司有一个叫做“企业发展部”的部门,该部门的主要工作是研究国家政策,申报各种扶持基金和项目,当时这是该公司的主要收入来源。 第二节是2012-2013年,中国政府出台了800亿物联网产业“造市”计划——打造智慧城市。中国住建部分别于2012年底和2013年下半年公布了两批智慧城市试点城市,共193个。每个试点城市都分批规划建设试点项目。瞬间又有过万个“智慧”项目启动。当时的物联网企业就是靠着这样的支撑一步步走下去的。 2014-2016年:局部市场主导阶段 第二个阶段(2014-2016年),局部进入市场主导阶段。但是,这个阶段开始的方式却颇为耐人寻味,始于2014年1月的Google收购Nest。这个事件成为了中国物联网产业发展最明显的分水岭。同时,也是中国物联网力量与国际物联网力量的首次会合。 当然,至今还有一部分人认为,物联网概念在其它国家并不盛行。但是就我看到的状况是,全球在信息科技领域占据主导地位的国家,在物联网产业均有布局,其中走在前列的应该是中国和美国,只是各自的提法不同,开始的切入点也不同。比如美国企业的切入方式更偏向于自上而下,即从支撑技术、产品开始;而中国企业一开始就选择自下而上,从应用开始。 这背后的原因之一可能要归结于,大部分中国人对物联网的理解是:它并非一向新技术,而是将既有技术的整合应用。但是总体来说,大家都从不同角度进行着对物联网的探索。Google收购Nest之后,或许让更多人看清了实现物联网的第一步——硬件智能化。 在此之前,中国参与物联网产业的都是大型企业,如电信运营商、从事B2B业务的大型信息化集成商等,即便是创业企业也是挂靠在政府下面的三产或者四产等等。就如前面所说,当时对物联网应用的理解,就是一个完整系统,大家都争着要做“物联网服务运营商”,并且当时所有能赚钱的物联网项目都是政府扶持的,所以资本不够雄厚、没有资源背景的中小企业,或者创业者根本没机会,而从事B2C业务的互联网公司们又看不上。 但是,Google收购Nest之后,中国的互联网巨头们好像瞬间觉醒了,开始频繁出现于物联网的各种活动和论坛上。同时,原来互联网圈子的投资机构也开始活跃于物联网圈子了。这给草根创业者们带来了前所未有的机遇。 因此,2014年,在物联网产业中一直探讨的“颠覆”出现了第一个迹象:资源移位。原本没有机会的,仅掌握着20%资本和资源,却占据80%人群份额的“草根”们,成为了物联网产业的主力军;在资本的煽动下,各种千奇百怪、异想天开的智能终端创意充斥于市场上;传统制造业,甚至传统IT产业都看不懂市场上在发生着什么,瞬间充满了危机感。这个时候,物联网看上去,终于配的起发起者对它最初的设想了。毕竟,资源分配都不改变,怎么能谈的上颠覆?! 也是在这一年,深圳成为了物联网产业的焦点,因为80%的智能硬件创业者都集聚在深圳。深圳竟然瞬间成为了中国科技城市的代表。记得2015年一本名为《迪拜视野》的杂志,列举了全球最具代表性的8个科技城市,其中,中国上榜的便是深圳。并且据说2016年拉斯维加斯的CES展上,四分之一的企业都来自中国深圳。 但是这个阶段,中国物联网产业取得的突破,都集中在人们生活相关的领域,比如今年中国新上市的白色家电100%实现了智能化;黑色家电40%实现了智能化;小型家电正在逐步走向智能化;小型化、便携式医疗设备大规模出现;智能家居产业火热,虽然仅停留在产业界。而在市政、民生、工业、农业等,原本买方就是政府,或企业的领域,突破依然有限。数月前在走访一家农业物联网企业时,了解到2016年开始,中国政府取缔了对农业物联网项目的资金扶持,农业物联网的推广便进入了举步维艰的地步。 2016年后:物联网迎来第二个春天 第三个阶段(2016年7月以后),整个物联网产业进入良性发展阶段。当然,说起发展,每个阶段其实都在发展。但是以前的发展应该说太过跌宕,太过迂回,太过不健康,所以不能算真正的发展。而2016年,应该说是各种条件都相对成熟后的发展,所以谓“良性发展”。 2016年7月,发生了一件震惊科技圈的大事件:软银322亿美元收购了全球领先的手机芯片设计厂商Arm。软银选择在这个时候收购Arm的原因,并非因为其是手机芯片领域的龙头,而是因为其打造了一款物联网操作系统——ArmEmbeddedOS。也就是说,软银意图的是整个物联网时代。 这个事件与其说是引发物联网产业第三次进阶的导火索,不如说是物联网产业过去7年探索的结果。因为,2016年实现物联网的很多条件和变量几乎都完备了。 第一,物联网的基石——云计算,技术基本达到成熟,并已经形成鲜明产业格局; 第二,物联网的应用支撑——大数据,底层技术架构已经相对稳定,Hadoop的地位已经确立,在某些领域如金融、环保、电力等,已经有成熟应用案例; 第三,物联网传输层的核心技术——NB-IOT和5G可以商用,对整个物联网产业的发展来讲,是一个极大地跨越; 第四,制造业的觉醒。这应该说对物联网产业的发展极其重要。因为物联网的核心是“物”,如果“物”的生产者和制造者不接受新技术,不接受变革,那么将拖慢整个产业的发展速度。 更重要地是,这一年,中国的物联网产业在工业与民用领域开始齐头并进,而不是像2013年前只重工业应用,也不是像2014、2015年间,民用独领风骚。这背后,应该说是政府力量和市场力量的共同推动。比如最近两年,中国政府针对工业4.0、智能制作推出了一系列扶持政策,以及示范试点项目。因为,工业不改革,物联网的应用便不会深入。就像互联网时代,无论说它怎么颠覆了传统产业,最终也只是改变了信息传播通道,以及消费领域的交易渠道。而工业占据着中国80%的经济份额,所以工业领域的变革,将带来的价值远远大于消费领域。总之,这个阶段,在中国,政府与市场开始合力推动物联网产业的发展。 不过,由于中国的经济特色,核心工业一直由政府主导,所以工业领域的变革开始后,或许将再次刷新中国科技城市的排名。当然,这一次,不仅无锡和深圳,很多其它城市如上海、杭州、南京、北京、成都等都已对物联网“虎视眈眈”,所以最终谁能胜出,很难评判。不过,从目前的状况来看,无锡的决心与力度似乎更大一些。 本文转自d1net(转载)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

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部分的功能。

用户登录
用户注册