中企动力 > 商学院 > web培训心得体会
  • ?

    WebView深度学习(二)之全面总结WebView遇到的坑及优化

    mm123

    展开

    这篇文章讲一下WebView遇到的那些坑,带领各位爬坑。这里如果有你没遇到的问题,欢迎留言告诉我,我尽我所能帮你解决。感谢大家支持。

    三、WebView的那些坑

    (1) 为什么Webview打开一个页面,播放一段音乐,退出Activity时音乐还在后台播放?

    ◆◆ 解决方案 1:

    //销毁Webview@OverrideprotectedvoidonDestroy(){if(mWebview !=null) { mWebview.loadDataWithBaseURL(null,"","text/html","utf-8",null); mWebview.clearHistory(); ((ViewGroup) mWebview.getParent()).removeView(mWebview); mWebview.destroy(); mWebview =null; }super.onDestroy();}

    还有别问我为什么要移除,等你Error: WebView.destroy() called while still attached!之后你就知道了。

    ◆◆ 解决方案 2:

    @OverrideprotectedvoidonPause(){ h5_webview.onPause(); h5_webview.pauseTimers();super.onPause();}@OverrideprotectedvoidonResume(){ h5_webview.onResume(); h5_webview.resumeTimers();super.onResume();}

    Webview的onPause()方法官网是这么解释的:

    Does a best-effort attempt to pause any processing that can be paused safely, suchasanimationsandgeolocation. Note that this call does not pause JavaScript. To pause JavaScript globally,usepauseTimers().ToresumeWebView,callonResume(). 【翻译:】通知内核尝试停止所有处理,如动画和地理位置,但是不能停止Js,如果想全局停止Js,可以调用pauseTimers()全局停止Js,调用onResume()恢复。

    (2) 怎么用网页的标题来设置自己的标题栏?

    ◆◆ 解决方案:

    WebChromeClient mWebChromeClient =newWebChromeClient() {@OverridepublicvoidonReceivedTitle(WebView view, String title){super.onReceivedTitle(view, title); txtTitle.setText(title); } }; mWedView.setWebChromeClient(mWebChromeClient());

    ★★ 注意事项:

    ● 1.可能当前页面没有标题,获取到的是null,那么你可以在跳转到该Activity的时候自己带一个标题,或者有一个默认标题。● 2.在一些机型上面,Webview.goBack()后,这个方法不一定会调用,所以标题还是之前页面的标题。那么你就需要用一个ArrayList来保持加载过的url,一个HashMap保存url及对应的title.然后就是用WebView.canGoBack()来做判断处理了。

    (3) 为什么打包之后JS调用失败(或者WebView与JavaScript相互调用时,如果是debug没有配置混淆时,调用时没问题的,但是当设置混淆后发现无法正常调用了)?

    ◆◆ 解决方案:在proguard-rules.pro中添加混淆。

    -keepattributes *Annotation* -keepattributes *JavascriptInterface*-keeppublicclassorg.mq.study.webview.DemoJavaScriptInterface{public;}#假如是内部类,混淆如下:-keepattributes *JavascriptInterface*-keeppublicclassorg.mq.study.webview.webview.DemoJavaScriptInterface$InnerClass{public;}其中org.mq.study.webview.DemoJavaScriptInterface 是不需要混淆的类名

    (4) 5.0 以后的WebView加载的链接为Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来,怎么解决?

    ★★ 原因分析:原因是Android 5.0上Webview默认不允许加载Http与Https混合内容:

    ◆◆ 解决方案:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//两者都可以webSetting.setMixedContentMode(webSetting.getMixedContentMode());//mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}

    ★★ 参数说明:

    ● MIXED_CONTENT_ALWAYS_ALLOW 允许从任何来源加载内容,即使起源是不安全的;● MIXED_CONTENT_NEVER_ALLOW 不允许Https加载Http的内容,即不允许从安全的起源去加载一个不安全的 资源;● MIXED_CONTENT_COMPLTIBILITY_MODE 当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的 风格;

    另外:在认证证书不被Android所接受的情况下,我们可以通过设置重写WebViewClient的onReceivedSslError方法在其中设置接受所有网站的证书来解决,具体代码如下:

    webView.setWebViewClient(newWebViewClient() {@OverridepublicvoidonReceivedSslError(WebView view, SslErrorHandler handler, SslError error){//super.onReceivedSslError(view, handler, error);注意一定要去除这行代码,否则设置无效。// handler.cancel();// Android默认的处理方式handler.proceed();// 接受所有网站的证书// handleMessage(Message msg);// 进行其他处理}});

    (5) WebView调用手机系统相册来上传图片,开发过程中发现在很多机器上无法正常唤起系统相册来选择图片。怎么解决?

    ★★ 原因分析:因为Google攻城狮们对setWebChromeClient的回调方法openFileChooser做了多次修改,5.0以下openFileChooser有几种重载方法,在5.0以上将回调方法该为了onShowFileChooser。

    ◆◆ 解决方案:为了兼容各个版本,我们需要对openFileChooser()进行重载,同时针对5.0及以上重写onShowFileChooser()方法:

    上一段示例代码,给大家看看:

    publicclassMainActivityextendsAppCompatActivity{privateValueCallback uploadMessage;privateValueCallback uploadMessageAboveL;privatefinalstaticintFILE_CHOOSER_RESULT_CODE =10000;@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webview = (WebView) findViewById(R.id.web_view);assertwebview !=null; WebSettings settings = webview.getSettings(); settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setJavaScriptEnabled(true); webview.setWebChromeClient(newWebChromeClient() {// android 3.0以下:用的这个方法publicvoidopenFileChooser(ValueCallback valueCallback){ uploadMessage = valueCallback; openImageChooserActivity(); }// android 3.0以上,android4.0以下:用的这个方法publicvoidopenFileChooser(ValueCallback valueCallback, String acceptType){ uploadMessage = valueCallback; openImageChooserActivity(); }//android 4.0 - android 4.3 安卓4.4.4也用的这个方法publicvoidopenFileChooser(ValueCallback valueCallback, String acceptType, String capture){ uploadMessage = valueCallback; openImageChooserActivity(); }//android4.4 无方法。。。// Android 5.0及以上用的这个方法@OverridepublicbooleanonShowFileChooser(WebView webView, ValueCallback filePathCallback, WebChromeClient.FileChooserParams fileChooserParams){ uploadMessageAboveL = filePathCallback; openImageChooserActivity();returntrue; } }); String targetUrl ="file:///android_asset/up.html"; webview.loadUrl(targetUrl);}privatevoidopenImageChooserActivity(){ Intent i =newIntent(Intent.ACTION_GET_CONTENT); i.addCategory(Intent.CATEGORY_OPENABLE); i.setType("image/*"); startActivityForResult(Intent.createChooser(i,"Image Chooser"), FILE_CHOOSER_RESULT_CODE);}@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode, Intent data){super.onActivityResult(requestCode, resultCode, data);if(requestCode == FILE_CHOOSER_RESULT_CODE) {if(null== uploadMessage &&null== uploadMessageAboveL)return; Uri result = data ==null|| resultCode != RESULT_OK ?null: data.getData();if(uploadMessageAboveL !=null) { onActivityResultAboveL(requestCode, resultCode, data); }elseif(uploadMessage !=null) { uploadMessage.onReceiveValue(result); uploadMessage =null; } }}@TargetApi(Build.VERSION_CODES.LOLLIPOP)privatevoidonActivityResultAboveL(intrequestCode,intresultCode, Intent intent){if(requestCode != FILE_CHOOSER_RESULT_CODE || uploadMessageAboveL ==null)return; Uri[] results =null;if(resultCode == Activity.RESULT_OK) {if(intent !=null) { String dataString = intent.getDataString(); ClipData clipData = intent.getClipData();if(clipData !=null) { results =newUri[clipData.getItemCount()];for(inti =0; i }

    重点坑:针对Android4.4,系统把openFileChooser方法去掉了,怎么解决?

    详情请见 博客http://blog.csdn/xiexie758/article/details/52446937我这里就不多说了。

    (6) WebView调用手机系统相册来上传图片,处理好第六点说的方法,我们打好release包测试的时候却又发现还是没法选择图片了。怎么解决?

    ★★ 原因分析:无奈去翻WebChromeClient的源码,发现openFileChooser()是系统API,我们的release包是开启了混淆的,所以在打包的时候混淆了openFileChooser(),这就导致无法回调openFileChooser()了。

    ◆◆ 解决方案也很简单,直接不混淆openFileChooser()就好了。

    -keepclassmembersclass*extendsandroid.webkit.WebChromeClient{publicvoidopenFileChooser(...);}

    (7)怎么在 WebView 中长按保存图片?

    1. 给 WebView添加监听

    mWebview.setOnLongClickListener(newView.OnLongClickListener() {@OverridepublicbooleanonLongClick(View v){ }});

    2. 获取点击的图片地址

    先获取类型,根据相应的类型来处理对应的数据。

    //首先判断点击的类型WebView.HitTestResult result = ((WebView) v).getHitTestResult();inttype = result.getType();//获取具体信息,图片这里就是图片地址String imgurl = result.getExtra();

    type有这几种类型:

    WebView.HitTestResult.UNKNOWN_TYPE 未知类型

    WebView.HitTestResult.PHONE_TYPE 电话类型

    WebView.HitTestResult.EMAIL_TYPE 电子邮件类型

    WebView.HitTestResult.GEO_TYPE 地图类型

    WebView.HitTestResult.SRC_ANCHOR_TYPE 超链接类型

    WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE 带有链接的图片类型

    WebView.HitTestResult.IMAGE_TYPE 单纯的图片类型

    WebView.HitTestResult.EDIT_TEXT_TYPE 选中的文字类型

    3. 操作图片

    你可以弹出保存图片,或者点击之后跳转到显示图片的页面。

    最后整理一下代码:

    mWebView.setOnLongClickListener(newView.OnLongClickListener() {@OverridepublicbooleanonLongClick(View v){ WebView.HitTestResult result = ((WebView)v).getHitTestResult();if(null== result)returnfalse;inttype = result.getType();if(type == WebView.HitTestResult.UNKNOWN_TYPE)returnfalse;// 这里可以拦截很多类型,我们只处理图片类型就可以了switch(type) {caseWebView.HitTestResult.PHONE_TYPE:// 处理拨号break;caseWebView.HitTestResult.EMAIL_TYPE:// 处理Emailbreak;caseWebView.HitTestResult.GEO_TYPE:// 地图类型break;caseWebView.HitTestResult.SRC_ANCHOR_TYPE:// 超链接break;caseWebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE:break;caseWebView.HitTestResult.IMAGE_TYPE:// 处理长按图片的菜单项// 获取图片的路径String saveImgUrl = result.getExtra();// 跳转到图片详情页,显示图片Intent i =newIntent(MainActivity.this, ImageActivity.class); i.putExtra("imgUrl", saveImgUrl); startActivity(i);break;default:break; } }});

    (8) WebView 开启硬件加速导致的问题?

    WebView有很多问题,比如:不能打开pdf,播放视屏也只能打开硬件加速才能支持,在某些机型上会崩溃。

    下面看一下硬件加速,硬件加速分为四个级别:

    Application级别

    Activity级别

    window级别(目前为止,Android还不支持在Window级别关闭硬件加速。)

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

    View级别

    view.setLayerType(View.LAYER_TYPE_HARDWARE,null);

    WebView开启硬件加速导致屏幕花屏问题的解决:

    ★★ 原因分析:

    4.0以上的系统我们开启硬件加速后,WebView渲染页面更加快速,拖动也更加顺滑。但有个副作用就是,当WebView视图被整体遮住一块,然后突然恢复时(比如使用SlideMenu将WebView从侧边滑出来时),这个过渡期会出现白块同时界面闪烁。

    ◆◆ 解决方案:

    在过渡期前将WebView的硬件加速临时关闭,过渡期后再开启,代码如下:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { webview.setLayerType(View.LAYER_TYPE_SOFTWARE,null); }

    Android 4.0+ 版本中的EditText字符重叠问题:

    做的软件,在一些机器上,打字的时候,EditText中的内容会出现重叠,而大部分机器没有,所以感觉不是代码的问题,一直没有头绪。

    出现原因:JellyBean的硬件加速bug,在此我们关掉硬件加速即可。

    解决方案:在EditText中加入一句:

    android:layerType=”software”

    图片无法显示:

    做的程序里有的时候会需要加载大图,但是硬件加速中 OpenGL对于内存是有限制的。如果遇到了这个限制,LogCat只会报一个Warning: Bitmap too large to be uploaded into a texture (587x7696, max=2048x2048)

    这时我们就需要把硬件加速关闭了。

    但开始我是这样处理的,我关闭了整个应用的硬件加速:

    随后我就发现,虽然图片可以显示了,但是ListView和WebView等控件显得特别的卡,这说明硬件加速对于程序的性能提升是很明显的。所以我就改为对于Activity的关闭。

    (9) ViewPager里非首屏WebView点击事件不响应是什么原因?

    如果你的多个WebView是放在ViewPager里一个个加载出来的,那么就会遇到这样的问题。ViewPager首屏WebView的创建是在前台,点击时没有问题;而其他非首屏的WebView是在后台创建,滑动到它后点击页面会出现如下错误日志:

    20955-20968/xx.xxx.xxx E/webcoreglue﹕ Shouldnothappen: no rect-based-test nodes found

    ◆◆ 解决方案:

    这个问题的办法是继承WebView类,在子类覆盖onTouchEvent方法,填入如下代码:

    @OverridepublicbooleanonTouchEvent(MotionEvent ev){if(ev.getAction() == MotionEvent.ACTION_DOWN) { onScrollChanged(getScrollX(), getScrollY(), getScrollX(), getScrollY()); }returnsuper.onTouchEvent(ev);}

    (10) WebView白屏是什么原因?

    ◆◆ 解决方案:

    WebView设置setLayerType(View.LAYER_TYPE_SOFTWARE,null); 示例代码如此下:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { setLayerType(View.LAYER_TYPE_SOFTWARE,null);}

    ◆◆ 相关源码分析:

    WebView继承View,View中有三种layer type分别为LAYER_TYPE_N...

  • ?

    Web前端开发css基础样式总结(推荐)

    诗筠

    展开

    下面小编就为大家带来一篇Web前端开发css基础样式总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    (adsbygoogle = window.adsbygoogle || []).push({});

    颜色和单位的使用

    颜色

    用颜色的名字表示颜色,比如:red

    用16进制表示演示 比如:#FF0000

    用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-255之间

    一般都用16进制表示颜色

    单位

    px:像素,与分辨率设置相关.

    %相对于浏览器的百分之多少,可以对宽度width做设置,不可以对height做设置

    文本样式(text)

    color:设置文本颜色

    text-apgn:设置文本对齐方式

    center

    left

    right

    letter-spacing:字间距/字母间距

    word-spacing:单词间距,有空格就设置,中文看空格.

    pne-height:行高(第二行的行高=第一行底部到第三行顶部)

    text-indent:一般30px就2个

    text-decoration:文本装饰

    underpne:下划线

    overpne:上划线

    pne-through:删除线

    bpnk 闪烁(不会用)

    text-transform:大小写转换

    uppercase:全部大写

    lowercase:全部小写

    capitapze:每个单词以大写开头

    text-shadow:创建文本阴影(水平偏移量px,垂直偏移量px,模糊程度px,阴影颜色),模糊程度px值高越模糊.

    小编推荐一个web前端学习的学习裙【六五五 九六二 四六一 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起

    进步一起学习!裙内有开发工具,很多干货和技术资料分享!

    设置字体:

    font-style:字体样式itapc,obpque斜体

    font-size:设置字体的大小

    font-weight:设置字体的粗细,bolder最粗

    font-family:设置文字字体,楷体,隶书等等

    font简写属性: style weight size

    family(空格)顺序必须按这个格式,一般用了简写属性之后把行间距letter-spacing放font属性后边,不然会覆盖.

    边框和背景

    为元素应用边框

    border-width:边框宽度

    border-style:边框样式

    none没有边框

    dashed虚线

    soped实线

    double双线

    groove槽线

    dotted圆点线边框

    inset内嵌 outset外凸

    ridge 脊线边框

    bolder-color:边框颜色

    简写形式border:width style color 没有先后顺序

    单独设置某一条边框

    border-top/bottom/left/right-width/style/color

    简写形式:border-top{width,style,color}

    应用圆角边框(x半径,y半径,xy相同时写一个就好了)

    border-top/bottom-left/right-radius

    简写:border-radius

    设置元素背景

    margin-right: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 0px;

    padding-bottom: 0px; pst-style: disc;">background-image:{url("")} 背景图片地址

    background-repeat:背景图重复方式,一般no-repeat

    background-size:背景图尺寸

    background-position:背景图位置

    简写:background:color image repeat position,尺寸不写,会冲突

    创建盒子阴影

    box-shadow:水平偏移量 垂直偏移量 模糊值 阴影的延伸半径 阴影颜色 10px 10px 5px 0px red;

    添加多个阴影,直接第一个之后用逗号继续写第二个,第一个设置成整数,第二个阴影设置成负数

    设置轮廓

    边框和轮廓的区别:轮廓不属于页面,不会因为应用轮廓而调整页面的布局

    边框占有实际大小,轮廓不占有

    当设置hover悬停时,轮廓修饰的p不会发生位移,边框修饰时位移

    outpne-color:轮廓颜色

    outpne-style:轮廓样式

    outpne-width:轮廓宽度

    outpne-offset:轮廓距元素边框偏移量

    简写: outpne

    其他样式(表格,列表,透明度,光标)

    表格

    border-collapse相邻单元格边框处理,合并表格=collapse

    border-spacing:相邻单元格间距

    caption-side:标题位置

    empty-cells:空单元格是否显示

    列表

    pst-style-tyle:列表前边的标记样式 圆点,方点等等

    pst-style-image:列表图像标记

    简写:pst-style:none 取消列表的所有属性 一般用于导航

    横向导航: p{display:inpne}

    透明度

    opacity:设置透明度(0-1之间取值)

    光标形状

    cursor:设置光标形状,当光标放在某个p上边,设置等待状,手形状等等.

    盒子模型

    盒子模型分为元素,内边距,边框,外边距,

    1.设置一定尺寸的元素

    1).width:设置元素宽度2).height:设置元素高度

    2.设置内边距

    padding-top/bottom/right/left

    padding:简写形式

    3.设置外边距(边框到浏览器边缘或者到下一个盒子的距离)

    margin-top/bottom/left/right

    margin:简写形式

    4.设置最小和最大尺寸(宽度设置为百分比时,扩大或缩小浏览器或者换了大屏或小屏显示器之后,防止元素错位或溢出)

    min-width:最小值为两p宽度相加值

    max-width:最大值

    5.处理元素内容溢出

    overflow-x/y:x或y轴溢出

    overflow:简写形式: scroll设置滚动条(溢出处理方式)

    6.改变元素类型

    1).元素类型分为:

    inpne行内元素:在页面中不可设置宽高,也不会独占一行,b,span

    inpne-block行内块级元素:不能独占一行,但能设置宽高.img元素

    block块级元素:独占一行,可以设置宽高,p,p元素

    2).改变元素类型display:

    元素类型可以相互转换,转化之后元素性质也随之改变

    p一般不转化为行内元素,会丢掉,不能设置高

    3).隐藏元素: display:none

    7.浮动和阻止元素堆叠

    浮动:float:left/right

    消除元素堆叠在一起: clear:both(左右都消除)

    8.案例:

    百度页面的搭建:

    技巧:为了让p居中,直接margin:0 auto;

    为了初始不执行浏览器默认特征: *{margin:0px; padding:0px}

    为了防止p块溢出,设置最大最小值. 最小值就是左右两边p相加

    文字垂直居中:pne-height

    做导航,链接a标签加到p标签外边

    布局样式

    1. 定位方式position

    static:默认,元素为普通元素,文档流定位,从上到下

    relative(相对的):元素的位置是相对于普通的位置定位的 ,位移之前的位置 其他元素用不了,一般不做太大的改动 ,对某个元素位置进行微调

    ,只能使用top,left 我感觉他是相对于他之前的位置移动的

    fixed(固定的):相对于浏览器窗口来定位 ,常用!!!,位移之前位置不会被占用, 上下左右都可以使用,小广告常用手法, 滚动条不断移,他的位置也不变 ,他会脱离文档流,漂浮于文档流上边,他这个上下左右是相对于边的位置,比如:top50px 不是向上移动50px ,而是元素相对于顶部边框距离50px 设置buttom也同样可以使用,而且拉动滚动条也不会变化位置

    absolute(绝对的):元素相对position值不为static的一个祖先元素定 子元素依据祖先元素变化 祖先元素不能为static 依据谁变化,谁不可以为static(默认为static),发生在父子 或 祖先元素与后代元素之间的位移定位

    2. 定位布局

    top/bottom/left/right

    3. z-index

    用来设置元素 和 元素 的显示层数,正数 负数 都可以

    必须配合position使用

    过渡,变形

    1. 过渡过渡:元素由一种样式逐渐变为另一种样式

    属性:

    transition-delay:设置过渡前的延时

    transition-duration:设置过渡用时

    transition-property:设置过渡参与的属性

    transition-timing-function:过渡速率(pnear匀速)

    transition:简写形式(property duration timing-function delay)

    反向过渡:

    hover中设置的,粘贴到p中,就可以了

    2. 变形

    transform: 指定如何变形

    transform: scaleX/Y(1.5) 缩放1.5倍

    transform: rotate(360deg) 旋转360度 deg代表度数,配合过渡时间 效果很好

    transform: skew(X轴角度,Y轴角度) 倾斜的角度

    transform: translate(X轴距离,Y轴距离) 移动的距离

    以上这篇Web前端开发css基础样式总结(推荐)就是小编分享给大家的全部内容了

  • ?

    web前端开发年终工作总结

    华碧玉

    展开

    2018年不知不觉已经在我们手中流逝,也许是因为忙碌,也许是因为充实,所有觉得时间过得很快。来到来到我们的这个积极向上的长沙seo搜遇网络已经有2年多了。在工作中,经历了很多欢快困难的时刻,结识了一批工作上的好同事,生活上的好朋友,领悟了很多新技能,感谢领导给了我展示的空间。在2018年的这段时间里,通过自身的不懈努力,在工作上取得了一定的成果,但也存在了很多不足之处。回首2018年,现在将web前端开发工作总结一下。

    web前端工程师年终工作总结

    2018年web前端开发工作总结

    从去年开始,我们项目组就接手了OA系统开发,由于框架的前端样式老旧,我们打算将框架的样式全面改版,包括样式风格,用户体验等多方面着手处理。

    框架采用样式风格

    一个系统好不好,第一映像很重要,就像别人对你的认识是从第一印象开始的,这种第一印象一且形成将很难改变。研究表明,当一个人见到另一个人时第一印象往往是在前3秒确定的,而且是在没有任何语言交流的前3秒,因为别人已从你的形象气质窥见了你的基本特征。在应酬中,如果第一印象不好,想要挽回,就要做很大的努力,所以,一定要特别注意第一印象。所以系统的第一印象也是非常重要的。

    我们采用layui样式风格,在layui上加以个性化样式的修改,让网站第一印象看上去大气,清晰,简洁。在中间我们付出了很多努力与坚持,才能让我们现在的OA系统看上去简约而不简单。

    提升用户体验操作

    1、我们采用了简单易懂的网站架构,让用户看到网站界面就知道如何操作,将每个用户桌面做自定义操作,让每个用户都有自己个性化的桌面。

    2、系统采用方便明了的操作方式,系统都是为了迎合用户,如果操作界面太麻烦,用户可能直接放弃,所以需要将系统的设置尽量人性化。

    3、系统采用用户引导方式的界面,一个步骤接着下一个步骤,让用户不知不觉中处理好工作上的任务。

    web前端开发存在不足

    虽然网站整体样式风格已经调整过来,由于之前系统框架原因,网站样式调整起来十分吃力,有部分样式只能做风格上的调整,离预期效果稍有偏差。在工作时间很仓促的情况下,事情多了,就一定要有详实而主次分明的计划,哪些需要立即完成,哪些可以缓缓加班完成,今年在计划上自己进步很大,但在这方面还有很大的优化空间。

    2019年web前端开发工作计划

    在新的一年来临之际,我希望我们的OA系统做得更好,继续完善系统整体前端样式风格,用户体验。不断加强个人web前端开发的技能,提高工作效率,扬长避短,发奋工作,克难攻坚,做好web前端开发的工作计划,力求把OA系统做到更好。也希望我们OA团队给公司带来更大的价值,祝我们搜遇网络公司成功上市!在新的一年里大展宏图。

  • ?

    南通Java培训就业心得体会分享_南通北大青鸟

    北雪

    展开

    南通Java培训就业心得体会分享_南通北大青鸟

    南通Java培训

    南通北大青鸟南通Java培训部 小熙

    (南通北大青鸟简称“南通青鸟”)

    时光飞逝,南通北大青鸟已有几批学员毕业,有两个南通Java培训班学员,一个UI设计班学员,一个Web前端班学员。这些学员这两周投身到招聘市场中找工作,南通Java培训等学生的就业成果喜人,许多学员的试用期工资水平比较理想,转正后工资将会有可能进一步提升,以后我将会再发文给出就业喜报!这里我分享几点这批南通Java培训等班学员就业应聘过程中发现的问题,值得我们老师和学员借鉴。

    南通Java培训

    第一,学历很重要。目前中国整体经济形势下行,IT和互联网行业也进入了一个低潮期,许多小公司采用收缩战略以期渡过此困难期,一些运行较好的大公司仍然招人,但也相应提高了要求,最低要求本科以上。这就提醒了我们南通Java培训等许多学员今后注意尽早提升学历,避免以后再跳槽时再出现此次尴尬的局面,许多较好的公司严卡学历,根本不给低学历学员面试机会。

    第二,有付出就有回报。收获和付出的汗水是成正比的,学习来不得半点虚假和马虎。目前南通Java培训班的学员,平常学习努力,学习较好的已经大都顺利找到了工作。而学习较差的学员仍然在烦恼如何通过招聘公司的面试和笔试。

    第三,态度决定一切。学习华为的“狼性”,积极主动的态度总能找到人生的机会,这次找工作的过程尤其能体现出来。南通Java培训的高雨楠,UI设计班的孙天乐同学积极主动性发挥的就很好,最终二人也获得了理想的职位和薪水待遇。平常的学习,以后的工作也都需要积极的人生态度,你会找到不一样的精彩人生。

    南通Java培训

    最后恭喜各位南通Java培训班以及其他班级的同学都找到理想的工作,收到满意的薪水。即使刚进入IT行业参加工作时薪水较低,没有关系,不要心急,要沉下心来把技术学好,经验积累,美好的前程在等着你们!“Stay Foolish, Stay Hungry!”

    2019年3月8日于南通北大青鸟恒熙校区

    相关搜索

    • 工作心得体会
    • 培训心得体会总结
    • 学习心得体会
    • 中国国家培训网
    • 为什么要培训
    • 培训班有哪些专业
  • ?

    Java Web项目开发要学习的所有技术和开发工具总结!

    三德子

    展开

    概括一下,实施Java的WEB项目需要掌握的技术如下:Java语言、面向对象分析设计思想、设计模式和框架结构、XML语言、网页脚本语言等。

    1、Java语言

    Java语言体系比较庞大,包括多个模块。从WEB项目应用角度讲有JSP、Servlet、JDBC、JavaBean(Application)四部分技术。

    (1)、Java Database Connectivity (JDBC)技术

    在Java Web应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的。JDBC(Java Database Connectivity) 是一种用于执行SQL语句的 Java API。它由一组用Java编程语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Java API 来编写数据库应用程序。

    简单地说,JDBC可做三件事:

    l与数据库建立连接,

    l发送 SQL 语句,

    l处理结果。

    (2)、Servlet技术

    Servlet是运行在服务器端的程序,可以被认为是服务器端的applet。servlet被Web服务器(例如Tomcat)加载和执行,就如同applet被浏览器加载和执行一样。servlet从客户端(通过Web服务器)接收请求,执行某种操作,然后返回结果。

    Servlet的主要优点包括

    lServlet是持久的。servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。

    lServlet是与平台无关的。如前所述,servlet是用Java编写的,它自然也继承了Java的平台无关性。

    lServlet是可扩展的。由于servlet是用Java编写的,它就具备了Java所能带来的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应你的需求。servlet自然也具备了这些特征。

    lServlet是安全的。从外界调用一个servlet的惟一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在你的Web服务器有防火墙保护的时候。

    lServlet可以在多种多样的客户机上使用。由于servlet是用Java编写的,所以你可以很方便地在HTML中使用它们。

    (3)、JavaServer Pages(JSP) 技术

    JSP是从Servlet上分离出来的一小部分,简化了开发,加强了界面设计。JSP定位在交互网页的开发。运用Java语法,但功能较Servlet弱了很多,并且高级开发中只充当用户界面部分。JSP容器收到客户端发出的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式响应给客户端。其中程序片段可以是:操作数据库、重新定向网页以及发送E-Mail等等,这些都是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,与客户端的浏览器无关,因此,JSP称为Server-Side Language。

    JavaServer Pages的主要优点包括

    ●一次编写,各处执行(Write once, Run Anywhere)特性

    作为Java平台的一部分,JavaServer Pages技术拥有Java语言“一次编写,各处执行”的特点。随着越来越多的供货商将JavaServer Pages技术添加到他们的产品中,您可以针对自己公司的需求,做出审慎评估后,选择符合公司成本及规模的服务器,假若未来的需求有所变更时,更换服务器平台并不影响之前所投下的成本、人力所开发的应用程序。

    ● 搭配可重复使用的组件

    JavaServer Pages技术可依赖于重复使用跨平台的组件(如:JavaBean或Enterprise JavaBean组件)来执行更复杂的运算、数据处理。开发人员能够共享开发完成的组件,或者能够加强这些组件的功能,让更多用户或是客户团体使用。基于善加利用组件的方法,可以加快整体开发过程,也大大降低公司的开发成本和人力。

    ● 采用标签化页面开发

    Web网页开发人员不一定都是熟悉Java语言的程序员。因此,JSP技术能够将许多功能封装起来,成为一个自定义的标签,这些功能是完全根据XML的标准来制订的,即JSP技术中的标签库(Tag Library)。因此,Web页面开发人员可以运用自定义好的标签来达成工作需求,而无须再写复杂的Java语法,让Web页面开发人员亦能快速开发出一动态内容网页。

    今后,第三方开发人员和其他人员可以为常用功能建立自己的标签库,让Web网页开发人员能够使用熟悉的开发工具,如同HTML一样的标签语法来执行特定功能的工作。

    ● N-tier 企业应用架构的支持

    有鉴于网际网络的发展,应未来服务越来越繁杂的要求,且不再受地域的限制,因此,

    必须放弃以往Client-Server的Two-tier架构,进而转向更具威力、弹性的分散性对象系统。由于JavaServer Page技术是Java 2 Platform Enterprise Edition (J2EE)集成中的一部分,它主要是负责前端显示经过复杂运算后之结果内容,而分散性的对象系统则是主要依赖EJB ( Enterprise JavaBean )和JNDI ( Java Naming and Directory Interface )构建而成。

    (4)、JavaBean(Application)应用组件技术

    Application是Java应用程序,在WEB项目和一些开发中主要应用JavaBean。它就是Application的一部分,逻辑运算能力很强,能极大的发挥Java语言的优点。JavaBean 被称为是Java组件技术的核心。JavaBean的结构必须满足一定的命名约定。JavaBean能提供常用功能并且可以重复使用,这使得开发人员可以把某些关键功能和核心算法提取出来封装成为一个组件对象,这样就增加了代码的重用率和系统的安全性。

    高级的WEB项目会应用到以上所有技术,它们之间联合使用和协作开发会提高开发的效率和系统的性能。

    2、面向对象分析设计思想

    Java语言是完全面向对象的语言,所以在项目设计时会有很大的帮助,在设计时应尽量舍弃以往的面向过程的设计方式。

    在分析项目业务关系的时候,应用一些UML(Unified Modeling Language)图,例如常用的用例图(use case diagram),类图(class diagram),时序图(sequence diagram)等等,会有很大的帮助,这样能尽快找出业务逻辑主要面对的对象,然后对每个对象进行行为划分,最后再实现对象之间的集成和通信。

    3、设计模式和框架结构

    Java从语言角度来讲不是很难,但是从整体设计角度来讲我们还需要了解一些高级应用框架。如果要设计一个良好的框架结构,单单只掌握Java语言远远不够。这就涉及到一个设计模式,还有和设计模式相关的一些知识。

    设计模式在Java项目实施过程更是重中之重。主要在与两层的设计模式、三层的设计模式和N层的设计模式。它直接决定着项目的应用、部署和实际开发设计。

    在普通的WEB项目中很多采用两层的开发结构。JSP+Servlet或JSP+JavaBean。当对开发要求高的项目中使用很多的还是MVC的三层开发结构,也就是JSP+Servlet+JavaBean。它能分有效的分离逻辑开发,使开发人员能专注于各自的开发。同时也能时整个开发结构流程更清晰,但是需要比较高的开发配合度。

    在项目中,我们经常使用著名的Model-View-Controller(MVC)架构。MVC架构是随着smalltalk language语言的发展提出的,它是一个著名的用户界面设计架构。经典的MVC架构把一个组件(可认为是整个应用程序的一个模块)划分成三部分组 Model管理这个模块中所用到的数据和业务逻辑。而View管理模块如何显示给用户,Controller决定如何处理用户和该模块交互式时候产生的事件 如用户点击一个按钮等。

    4、XML语言

    在服务器和设计模式结构中会应用到自定义文件,而且在应用高级设计时也会定义自用的标签,现在流行的是用XML去定义配置,所以XML语言应该有一定掌握。

    当前,Java 2平台企业版(J2EE)架构在厂商市场和开发者社区中倍受推崇。作为一种工具,可扩展标记语言(XML)简化了数据交换、进程间消息交换这一类的事情,因而对开发者逐渐变得有吸引力,并开始流行起来。自然,在J2EE架构中访问或集成XML解决方案的想法也很诱人。因为这将是强大系统架构同高度灵活的数据管理方案的结合。

    XML的应用似乎是无穷无尽的,但它们大致上可以分为三大类:

    (1)简单数据的表示和交换(针对XML的简单API(SAX)和文档对象模型(DOM)语法解析,不同的文档类型定义(DTDs)和概要(schemas))

    (2)用户界面相关、表示相关的上下文(可扩展样式表语言(XSL),可扩展样式表语言转换(XSLT))

    (3)面向消息的计算(XML-RPC(远程过程调用),基于SOAP协议的Web 服务(Web Services),电子化业务XML(ebXML))

    5、网页脚本语言

    为了提高WEB项目的整体性能,提高人机交互的友好界面,网页的脚本语言是很有用处的,有的时候可以解决很大的难题或提高程序的性能和应用性。

    网页脚本语言的执行都是在客户端执行的,速度很很快,并且大多的操作与服务器没有交互运算,所以在一些应用中非常理想。在设计WEB项目的应用中,网页的脚本语言起着不能忽视的作用,所以如果设计WEB项目的应用中,对JS应有一定的了解。

    JS是一种基于对象(Object Based)和事件驱动(Event Driven)并具有安全性能(Secure)的脚本语言。使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它具有以下几个基本特点:

    (1)、它是一种脚本编写语言

    JS是一种脚本语言,它采用小程序段的方式实现编程。像其它脚本语言一样,JS同样已是一种解释性语言,它提供了一个易的开发过程。

    它的基本结构形式与C、C++、VB十分类似。但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。它与HTML标识结合在一起,从而方便用户的使用操作。

    (2)、基于对象的语言

    JS是一种基于对象的语言,同时以可以看作一种面向对象的。这意味着它能运用自己已经创建的对象。因此,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。

    (3)、简单性

    JS的简单性主要体现在:首先它是一种基于Java基本语句和控制流之上的简单而紧凑的设计, 从而对于学习Java是一种非常好的过渡。其次它的变量类型是采用弱类型,并未使用严格的数据类型。

    (4)、安全性

    JS是一种安全性语言,它不允许访问本地的硬盘,并不能将数据存入到服务器上,不允许对网络文档进行修改和删除,只能通过浏览器实现信息浏览或动态交互。从而有效地防止数据的丢失。

    (5)、动态性

    JS是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。它对用户的响应,是采用以事件驱动的方式进行的。所谓事件驱动,就是指在主页(Home Page)中执行了某种操作所产生的动作,就称为“事件”(Event)。比如按下鼠标、移动窗口、选择菜单等都可以视为事件。当事件发生后,可能会引起相应的事件响应。

    以上就是Java Web项目开发需要掌握的技术。Java目前正当红,学好Java对日后的发展肯定有帮助。人生苦短,让Java来点亮你的高薪人生吧!

    关注佳源信息,关注更多资讯。

  • ?

    常见web攻击总结系列一

    普罗普里亚诺

    展开

    XSS

    什么是XSS

    XSS攻击:跨站脚本攻击(Cross-Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种常见的web安全漏洞,它允许攻击者将恶意代码植入到提供给其它用户使用的页面中。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与Web应用。XSS的攻击目标是为了盗取存储在客户端的cookie或者其他网站用于识别客户端身份的敏感信息。一旦获取到合法用户的信息后,攻击者甚至可以假冒合法用户与网站进行交互。

    XSS通常可以分为两大类:

    存储型XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为:恶意用户的Html输入Web程序->进入数据库->Web程序->用户浏览器。反射型XSS,主要做法是将脚本代码加入URL地址的请求参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。

    比如说我写了一个网站,然后攻击者在上面发布了一个文章,内容是这样的

    ,如果我没有对他的内容进行处理,直接存储到数据库,那么下一次当其他用户访问他的这篇文章的时候,服务器从数据库读取后然后响应给客户端,浏览器执行了这段脚本,就会将cookie展现出来,这就是典型的存储型XSS。

    如图:

    如何预防XSS

    答案很简单,坚决不要相信用户的任何输入,并过滤掉输入中的所有特殊字符。这样就能消灭绝大部分的XSS攻击。

    目前防御XSS主要有如下几种方式:

    过滤特殊字符避免XSS的方法之一主要是将用户所提供的内容进行过滤(如上面的script标签)。使用HTTP头指定类型w.Header().Set("Content-Type","text/javascript")这样就可以让浏览器解析javascript代码,而不会是html输出。

  • ?

    Web测试干货总结

    Yonina

    展开

    一、关于页面

      页面显示部分

      (1)首先关注页面是否能显示完整,包括不同浏览器的是否能完整显示,在实际测试中经常发现有的页面或者是页面的弹窗不能完全显示

      (2)页面中的动画效果或者字体效果是否能正确显示

      (3)页面中有些表单项与输入框,输入域以及下拉框等是否存在默认提示,是否存在部分提示部分不提示的情况

      (4)数据列表中存在多条数据是否分页显示,以及分页操作后页面是否正常跳转  

    二、页面的标签

      (1)关于下拉框是否存在联动

      (2)条件查询,初次进入页面后显示所有的数据,填写条件之后如果查询到对应的数据是否能正确显示

      (3)容错性

      注意以下几种情况

      a 为空、非空

      b 唯一性

      c 字长、格式

      d 数字、邮政编码、金额、电话、电子邮件、ID号、密码

      e 日期、时间

      f 特殊字符 (对数据库)英文单、双引号,&符号

      

    三、单项功能测试

      a:连续增加  注意:增加完成后查看数据列表中,不显示或显示暂无的字段,观察是否没有增加进去

      b:增加后删除  注意:删除是否有提示信息,点击确定方可删除

      c:增加删除再增加

      d:连续删除

      e:增肌后修改  注意:修改过程中如果修改了下拉框表单项,对应的数据是否发生改变

      f:连续修改

      (1)增  新增数据是否显示

      提交时或提交前需对主要标识字段进行重复值、空值(空格)判断

      添加失败是否给出友好提示

      新增的数据如果与其他记录相关联,是否通过查询功能验证或直接在页面中显示

      (2)删

      删除时是否有提示

      被删除的数据刷新不存在于列表当中

      当被删除的记录与其它记录存在关联时,视实际需求给予不允许删除、更明细提示等信

      删除失败是否给出友好提示

      (3)改  进入修改页面后,表单中存在单选或复选按钮下拉框是否回显

      修改失败该数据是否仍存在

      修改页面是否与保存页面的数据验证保持一致

      (4)查  查询成功后自动定位到首页

      每次查询后保留当前查询条件

      没有查询到符合记录的条件时是否给出提示

      必要的查询是否提供模糊查询

      分页与查询,分类改变时查询条件是否同时被提交

    今天就分享这些,希望以上内容对大家有所帮助!

    更多精彩请持续关注!

  • ?

    嵌入式培训学员学习心得:不忘初心,方得始终

    白梦

    展开

    教务老师问我文笔好不好,让我写一篇嵌入式学习的心得体会,刚收到这条信息,自己楞了一下,我的口才不好,但幸运的是,我的文笔也很一般。不过喜欢胡思乱想、异想天开的我,却有很多话想说,也确实应该对自己这个三个月来的学习做一个总结。

    初心

    说到初心,不禁让我回想起当初选专业的时候,那时候的我,高中就学着做游戏外挂给自己玩,不过后来因为有了外挂,觉得游戏没意思,在高中就把游戏给戒了,一直到大四都没有玩过任何一款游戏。奇妙的是,也正是这段编程的经历,让我找到了自己的兴趣,那就是敲代码,代码这种东西,一旦敲上,享受到了那种DIY的快感,就很容易上瘾。故而我在选专业的时候,就想选跟编程有关的。然而,在外挂论坛混了一年多,其实比较清楚的是,如果做纯软件很难有竞争力,学java,web之类的人多如牛毛,岗位已经没有当初那么吃香了,软硬件结合才有挑战性,所以,依着自己喜欢DIY的性格,报了自动化类的专业。

    在大一的时候,社团的师兄焊了一块心形流水灯,当他发到朋友圈时,看到后,第一反应是”卧槽,这么会玩”,第二反应是“这东西怎么做?”。接下剧情的发展就是自然而然,我就入了单片机的坑……

    很快我焊出自己第一个心形流水灯,但是完全不知道它是怎么实现的,那么,再接下的剧情你应该也猜到了,买了一块51单片机的开发板,有空的时候就打开视频,跟着讲课的老师,在各个寄存器钻来钻去,玩一玩点阵LED,用ADC测一测温湿度,用数码管做一个“定时炸弹”,用串口给电脑发“情书”,玩得不亦乐乎,真是应了那句话,兴趣才是最好的老师。

    很快到了大三,是时候给自己定就业方向了,抛掉51单片机,断断续续玩了几个月STM32的我,在所有人都觉得我会选择考研的时候,却选择了做嵌入式,因为读一些纯理论的东西太累,太枯燥,太无聊,让自己的兴趣去实现自己的人生价值,赚取自己想要的生活,还有什么选择比这个更好的呢?

    当然了,选择来信盈达学习,也是经过一系列的分析和考虑的:

    ① 在学校那时,兴致勃勃想参加各种比赛,于是乎到处找人组队参加比赛,没想到大学也是如同社会一般现实,人家看不上我的技术,不想跟我组队,就算自己保证会好好的学,人家也不想带。后来想想也是,带人需要成本的,时间和精力都要付出,换成我,我也想找个直接就能上手的。

    ② 在学校碰壁的经历也让我明白,就算以后到了公司,真正肯带的师傅又有多少,就像我已经在实习的舍友,请了一个月假后,回到公司请教别人公司有哪些变化,却没人有那个精力和心思去和他讲解。确实,除非情商很高,沟通能力很强,别人乐于去与你相处,去交流。不然,做技术,只能老老实实自学。

    ③ But,相信自学过的人都明白,学习简单的东西还好,学得越深,越会发现东西真的太难啃了,嵌入式这一块,软硬件都得学,数电模电必须特别扎实,各种理论,各种概念,对于初学者来说,真的是压得我喘不过气来,所以开始学习STM32后,都是学一阵子,停一阵子,断断续续的,遇到难点,就直接放弃了,还是书桌上面的软床更舒服,一睡就是一下午,下床后想继续学,前面的东西还没学懂,对后面的知识也是充满了敬畏,不想继续学下去了,结果也是不用猜,这里学一点,那里学一点,靠着这些囫囵吞枣、乱七八糟的技术,去参加比赛,人家还是看不上我这点实力,去公司上班,也只能帮工程师打打杂,我就想,如果就此习惯了,生活也就这样了,拿着死工资,在消费成本低的地方还好,倘若在消费成本高的地方,怕是这样的工作还不够养活自己。

    当初选择来培训,也是下了很大的决心,学费要说不贵,那是假的,要是在父母那边没有阻力,那更是假的,要说非常认定自己学完就能找个好工作,那还是假的。但是,天道酬勤,我却相信努力了肯定会有收获是真的,放弃了考研,放弃了考国家电网,不是他们不好,而是我知道自己的兴趣在哪里,究竟做什么工作我才会感到快乐,所以抱着破釜沉舟的心态,不给自己留退路,一头扎进了自己喜欢的嵌入式,起码到现在,培训三个多月了,我没有后悔过,也从来没让自己放松过,一旦选择了,便是全力以赴。

    烧钱的嵌入式与资源利用

    做嵌入式,需要买板子,买模块,做到天人合一,软硬结合,等着稍微高端点了,又会萌出自己画板子,买芯片,自己从无到有去搭建的想法,这个坑是越来越深,烧的钱也是越来越多,这也是选择来培训的一个原因,虽说模块,板子很烧钱,但是这边肯定积累了很多模块与学习板呀,想学什么模块,想要什么焊接材料,完全可以跟教务老师借,学完也不用花钱,拆下来,还给公司就是,我就是在这种情况下,把GSM、WIFI、OV7670,外加各种乱七八糟的传感器学完了,更重要的是旁边的同学在学不同的模块,所以彼此之间可以互相交换资料,互相指导,共同进步,记得那时候想学ESP8266这个物联网模块,弄个远程控制,刷个机智云进去玩一玩,但是自学下来,老是搞不定,但是旁边的兄弟,据说是花了一两个星期,搞出来点名堂了,立马跟他请教,总算是把这个模块给啃下来了,这也是我第一次享受到共同学习和分享所带来的快感。

    编程,没有捷径可以走

    在公司这边是第三次学C语言了,之前在学校为了考试,为了考证,学过两次了,虽然不像工程师那般牛逼,但是也有自己的一番理解。刚来到信盈达,就开始上C语言,一上就是一个月。此前,认为自己C语言还学得可以,但是越学越深入,发现以前很多坑都没填上,有很多细节都没有注意到,而这些细节又很有可能引起神秘而强大的BUG,而且从后期的M4和Linux的学习来看,C基础非常重要。

    那么你就会问了,如何学好C语言?有人说看懂代码就会敲了?NO!有人说一直敲代码就能学好了?NO!编程,没有捷径可以走,敲代码的经验需要一个积累和沉淀,光是看懂代码,一上手敲,怕是都不知道从什么地方开始,迷迷糊糊敲完了#include “stdio.h”,写出了int main(void),然后就没有然后了。

    其实代码重点不是在敲,而是在调试,行话说得好“两分敲,八分调”,把代码敲出来不难,难的是后面大量时间的调试,所以想学好C语言,不只是跟着老师学完知识点就行了,要自己去认真的把每个知识点调试一遍,自己才会记忆深刻,再然后就是去找题做,只要做完各种不同的题,才能遇到各种乱七八糟的BUG,遇到BUG多了,编程能力自然就上去了,再然后才是去浏览别人的代码,看一下别人的编程思路,汲取里面各种骚操作,同时也能规范自己的编程格式。

    知识的汲取与人脉的积累

    在这边培训, 不只是学习知识,更是积累人脉。在大学,虽是同班同学,但毕业后却是各行各业,做相同类型工作的人很少,做嵌入式的同学更少了,但是在这边,大家的目标都是一样的,有着共同的目标,共同的话题,共同的兴趣爱好,在教室里面,真的是我大学四年以来呆过最舒服的地方。虽说以后可能不会在同一家公司,但是却是做类似的工作,相信以后大家聚在一起,最起码能了解到整个行业的行情,最起码能互相弥补自己在某一些方面的不足,就像之前说的ESP8266模块,可能没碰过,却是有这种资源与人脉,你不会做,请教后同学们也很乐意教你做,因为大家一起学习过,彼此互相信任,人多力量大,相信职场上的发展也会更加广阔。

    学嵌入式不止这4个月

    嵌入式在软件方面的学习量不亚于做Java,C++编程,甚至和底层打交道还要学得更深入,难度更大,算法和数据结构神马的都要所有了解,硬件方面就更多了,还要学着去画PCB,看各种芯片各种文档,经验的积累也十分重要,虽说现在分出了软件/硬件工程师,但是两者是相辅相成的,没办法分开的,芯片的编程需要考虑电路结构,电路的搭建需要考虑软件的编写难度,还要看懂示波器,看懂频谱,大部分的嵌入式,跟通信都有关,还要知道什么是拉普拉斯、傅里叶、PID。有时候觉得,要学的东西好多,学这么多没有用,人还是要一精多通,可往往是,书到用时方恨少。

    当然,很多人会疑惑“嵌入式能干一辈子吗”,我觉得学习量是一个考验,玩嵌入式,绝对是活到老,学到老,知识更新的速度远远超过自己获取知识的速度,不断的学习才能跟得上行情和市场,不断的实践,不断的现学现卖,嵌入式是一生的事情,远远不止这四个月,但是也多亏了这四个月,能帮我打开这扇大门。

    选择嵌入式,我相信,即使到60岁,我还会感谢自己的选择,感谢自己啃下的一块块的硬骨头,感谢嵌入式给我带来的成就感。

    笔者:詹**

    献给同样在学、想学嵌入式的你!

  • ?

    2018web前端面试总结

    赫凌波

    展开

    从今年3月份开始面试笔试找实习找校招到现在也半年多了,拿到了不少offer,也有了自己的一点心得体会,这里写出来分享一下,拙见勿喷。

    注意一下,以下的观点仅代表我个人的体会不代表任何人任何组织和任何公司。

    关于流程

    一般的实习&校招招聘大体有这么一个流程:(这里我个人都是走的官网投递的渠道,没有经历过宣讲会的环节,这一部分我没啥经验)

    笔试

    笔试作为招聘的第一个环节,一般考察的都是专业基础知识,这里会着重考察你在学校的计算机相关基础,也就是很多人会发现,我明明考的是前端的卷子为啥前端的知识点考的这么少,而且有时候也会发现,前端的卷子考的没有前端的知识点。

    笔试也是有种类之分的,像我参加的360和阿里的校招,笔试都是分为能力测试和技术笔试的,这里的能力测试也就是我们以前经常无视的逻辑思维题或者是分析题之类的;而技术笔试呢,顾名思义就是考察计算机基础和专业基础了,这里不废话了(提一点:可能你会遇到有的笔试编程题选不了js,这里就自己斟酌了)。

    关于基础知识,这里就是计算机网络、操作系统、数据结构、数据库等。

    关于笔试的建议就是多刷题(超级学霸请无视我),这里推荐几个网站:牛客网,leetCode,赛码网。

    注意:像牛客和赛码这里要注意一下,很多公司的笔试都是用的这两个平台,建议多熟悉下这里的编程题的在线环境。

    一面

    恭喜你,如果如果笔试过了那你就迈过了一个大坎,要知道很多同学都是连面试的资格都没有的。到了面试阶段,考察的大多是专业知识了,当然也不排除考计算机基础知识的。

    一面这里考察的知识点比较基础,这里你的面试官会分析你的技术基础能力扎不扎实,你这个人的性格如何如何然后汇报个组里的老大决定你是否有机会参加下一轮的面试。

    注意我提到的性格,大家都不愿意和一个怪异的人一起工作,一定要有热情乐观积极上进,这点真的很重要!

    这里我的建议就是,基础我就不用说了一定要很扎实,面试官一下子就能看出你到底是会不会了,不要不懂装懂。但基本上一面要是被问住太多了的话那确实很不乐观了,但是也不排除一种情况,你的基础非常的扎实,面试官觉得这些基础知识点问了也是浪费时间于是开始深入问你,这个时候要注意,确实会闻到很多你不会的知识点,不要放弃尽可能的尝试,但也不要过于自大,面试官希望看到的是你的潜能和面对未知问题的解决能力。(web前端学习交流群:328058344 禁止闲聊,非喜勿进!)

    二面

    恭喜你通过了一面,你的基础还不错,接下来你将遇到的是组里的高T或者是业务方向的老大了(和大牛面对面)。

    二面也会考察基础知识,这里基本都是匆匆过一遍了。注意了我可以很负责任的说,二面你会遇到很多的困难,二面会考察你的项目,面试官会根据你简历上的项目经历找一些他感兴趣的来问你,简要的说并且说重点,从使用技术栈到项目架构的设计到技术难点的实现,分点说。

    面试官也是人,他也会好奇一些神奇的项目是怎么实现的,所以我的建议也就是平时多做一些有水平的项目,不要把todolist、图书馆管理系统这种烂大街的项目写在自己的简历上。

    这里透露一下,你的二面面试官,很有可能是你未来的leader,它们问的问题很多都是平时遇到的技术难点啊,自己踩过的小坑啊啥的,有心的同学自己默默记住这些问题回去多看看,对自己的提升会有很大的帮助(毕竟你能网上搜到的问题都是些烂大街的问题,这时候大牛遇到过的问题和你探讨这种机会不用说都知道很难得吧)。

    这里还要废话一下,不要遇到难题就放弃说不会,多尝试一下,还是那句话,面试官想看到你对未知问题的解决能力,我一般都是先说出我的想法把我的实现方法说一遍,这时候可能会遇到直接怼对了的情况那么只能说恭喜啦,但是大多数情况下你的解决办法都不是最优的,这时候面试官会一点点把你往正确的方向引导,这一探索的过程才是面试官看出你这个人的软硬实力的关键。

    三面

    恭喜你到最后一步了,这里是HR或者技术经理面啦,这里表现最真实的你就好,和hr或者老大聊聊天,说说自己的基本情况啥的,这里就不多说了。

    注意:其实还是要注意一点,很多同学都说我三面都过了为啥最后还是被拒了呢,这里其实不是你的第三面被拒了(当然你如果人品有问题啥的我就不多说了),这里据我所知有这么几种情况:

    1. 虽然真的面的很不错,但是公司的hc有限,只能说很遗憾;

    2. 还是hc有限这个点,但是这家公司是根据笔试+一面+二面+三面的综合评分决定的,只能说你很厉害但是有比你更厉害的人;

    3. 其实你的二面一面就不怎么样了只是说技术面试官不忍心拒绝你,往往hr更懂得拒绝别人;

    总结

    这里就简单总结一下吧:

    自我介绍言简意赅,体现自己的个性和亮点,会什么着重说一下;

    基础知识(计算机基础 + 专业技能基础);

    对待问题的解决能力;

    不要表现自己的负面情绪,积极乐观;

    沟通技巧;

    注意:你的暑期实习经历对你的校招面试很有用,一定要争取找个暑期实习。我当时面暑期实习时候也是没有啥经验处处碰壁,后来实习了几个月后校招基本上是横扫,面一家过一家。

    关于技术知识点

    这里就罗列一下我之前遇到的知识点,我的其他文章也写到过详情可以去看看(有些公司面试完可能忘了就没写)。博主上一次面试距今也有几个月了,忘的差不多了,这里就罗列一点我突然想到的哈,请谅解。

    html + css基础

    基本的布局(中间自适应旁边固定啥的)的几种实现方法;

    垂直居中的几种实现方法;

    盒模型;

    position;

    行内元素和块元素;

    BFC(块级格式化上线文,和浮动一起考);

    animation;

    伪元素伪类;

    less、sass、stylus这种预处理器;

    ……

    js基础

    原型链;

    闭包;

    类和继承(es5实现方法 + es6实现方法);

    let、const、var;

    promise;

    异步处理方法;

    写一个方法遍历所有文档树所有节点(考察递归);

    cookie和webstorege;

    jsonp和跨域;

    sort排序相关(注意ascll这个坑)

    数组和对象的深浅拷贝;

    String + Array的一些基本操作;

    写一个数组去重的方法;

    冒泡和捕获;

    事件代理;

    this相关(注意箭头函数的this指向问题);

    call、apply、bind;

    变量提升;

    高阶函数;

    动画;

    setTimeout、setInterval和requestAnimationFrame;

    模块化开发;

    引起内存泄漏的原因;

    ajax;

    map、filter、reduce相关;

    Map和Set;

    移动端开发相关;

    框架和工具相关

    vue数据绑定原理;

    vue父子组件和兄弟组件的通信问题;

    vuex的原理;

    vuex的action和mutation的异步操作和同步操作问题;

    vue的事件监听;

    vue-router获取自定义参数;

    vue-router的go相关;

    vue组件设计相关;

    模块化的工具;

    webpack打包优化;

    设计一个自己的打包工具需要设计哪些主要功能;

    babel相关;

    mvvm的好处;

    jquery的一些基本用法;

    lodash相关;

    vue和react的对比;

    vue和jquery的对比;

    技术拓展

    设计模式相关(单例、发布订阅等);

    浏览器渲染过程;

    性能优化相关(这个点很大,设计很多方面,不要自以为优化就是网上经常看到的那一套);

    设计一个模版引擎;

    设计一个打包工具;

    设计一个mvvm框架需要注意的case;

    源码阅读相关;

    项目相关

    这里说几个我面试经常问到的项目。

    - 仿饿了么购物车(本地购物车和全局购物车和本地存储,不是网上一艘就能搜到的哪些哦);

    - Chrome插件开发lettalk;

    - rn开发的一个简单的社交app;

    - 仿vue mvvm框架(阅读vue源码时候仿的);

    - 仿Jquery类库(阅读jquery源码时候仿的);

    总结

    我能想到的也就这么多了,还是差很多东西的,请大家谅解。希望大家都能拿到自己满意的offer。

  • ?

    谈谈我总结的web前端10个妨碍进步的学习方式

    huoyezi

    展开

    近年来,很多人参加程序员培训进入了web前端行业,但是web前端可以说是一个终身学习的行业,每个人的学习方式,学习习惯通常是不会一模一样的,大家都知道,web前端工作如果是做到老,那也就要学到老。之前写文章的时候,我说过很多学习的方式和建议。今天说一下我个人不建议的学习方式,或者我个人觉得是妨碍进步的学习方式,希望大家引以为鉴,希望大家不要有经过程序员培训就不再需要学习了的心态。

    1.只看教程,不动手实战

    这个可以说是学习的最大的一忌,也是提醒过最多的一个注是事项!网上的教程有许多许多,各个语言,各个知识点,各方面的都有,javascript,html5,css3等的一些,随便一搜就一大把,毕竟互联网最大的优势之一就是资源共享!但是很多人看教程就只是看教程,不动手实操。即使博客的教程,视频教程再好,自己不动手实操,写代码,这样的学习方式,记忆根本不深刻,容易遗忘,到头来,可能什么都没学会!而且有些教程,如果没有跟着动手实操,可能会蒙圈。

    个人建议:要挑觉得适合自己的教程,也要动手实操,写代码。即使不是边看教程编写代码!在看完了教程之后,一定要自己动手实操!过程中,可能会遇到些问题,但是这样才会学习到更多,记忆也更加牢固!

    2.只学框架或者库

    这个情况,针对javascript(下称:js)现在没有以前严重了,在我大学和实习期间,那个时间还是jquery傲视群雄的时候。很多人会在聊天的时候会说:有了jquery,为什么还要学js?有了vue,为什么还要学js?面对这样的提问,我那时候没有回答,心里想:jquery或者vue就是用js实现的,不会js,学jquery或者vue第一学得吃力,第二学jquery或者vue肯定不会很深入。而且,万一有时候,项目不允许用jquery或者vue,那就基本不会写代码了。这时候,如果学习其它的框架或者库,基本又等于重新学一门语言了。

    个人建议:先把基础(html+css+js)打牢,再学其他框架或者库。虽然在会js的情况下,我不敢说学js的框架或者库就是查文档,查API。但至少学js框架或者库可以不会那么吃力!

    3.只顾着写代码

    这个就是我之前的一个习惯,只顾着写代码,不知道:耦合,实例化,继承等专业术语,和别人交流,无限蒙圈!根本不知道别人在说什么!互联网的技术更新的速度非常的快,隔三差五就发布一个框架,一个库,一个工具。虽然不是每一个更新的技术都需要学习。但是如果只顾着写代码,不了解新的技术。这样很容易使自己停泻不前,失去竞争力。

    个人建议:在写代码之余,要确保自己是不是了解代码,对代码有没有一个认识。以及多点留意消息,看下有没有什么技术更新!如果觉得更新的技术很实用,或者自己有兴趣,可以多了解下!毕竟互联网是一个做到老,学到老的一个领域,技术更新的很快,如果跟不上流行的趋势,说不定自己会被淘汰呢!

    4.太早接触复杂项目

    这个情况,比较普遍,无论是在学校或者是现在的培训机构。很多学习前端的人,基础没打牢,就在那里扬言要做一个大项目,我听到的有的人想做知乎,有的人想做世纪佳缘等等一些伟大的目标!但是全部人都是连网站的业务流程和逻辑都没弄清,最后越搞越乱,就放弃了!之前的伟大目标都成了烂尾楼,作用最多就是一个代码练习的作用!花了大量的时间,做了一件没很大的实际意义的事情!

    个人建议:从简单到复杂,复杂的网站,都是有很多简单的模块。不妨先从简单的功能做起,做完了一个功能再往里面加功能!现在所处的公司就是这样,开发的后台管理系统,开发几个月了,从一个只有员工的登录注册的功能,然后再逐一加功能,到现在项目逐渐完善!

    5.好高骛远,急于求成

    这个情况就是多见于培训机构出来的人。我不知道是不是所有城市都是这样,但是广州这边,给我的感觉就是这样。就是目标不切实际,对自己也不够认识!之前在群聊的时候,在金三银四那段时间,很多人找工作,聊天的时候也遇到过很多培训机构的人。简历上是各种精通,刚毕业在培训机构培训几个月,要么就是自带两三年工作经验,要么就是说自己培训了几个月,技术水平和市面上两三年的人差不多。总之就是把自己吹得无所不能!但是一出题,就十问九不知。

    个人建议:从实际出发,评估自己。想下自己会什么,能给企业带来什么!也可以停下别人的建议,和对比下别人的技术水平和工资,或者是上网找一些面试题,看下自己能不能完成那些面试题!最后评估下自己,认为自己处于什么位置!

    6.看到难点就逃避

    这一点,相信很多人都有感触,就在开发上,遇到上一个或者几个自己觉得没办法实现的需求或功能。千方百计地想着逃避,比如:这个功能不是很重要,不做可以吗?这个功能我从来没弄过,搞不定的。这个功能外包给别人做吧,我们做不了!很多一些逃避话语。大家可以想下,如果每次都是逃避,那么时间一久,自己技术水平是不是还停留在基础那个阶段?以后要怎么提升自己的技术水平。

    个人建议:迎难而上。在web前端开发这块,如果遇上了难题是正常的,如果没遇到难题就是见了鬼!面对难题,我们应该是挑战难题,而不是逃避!大家都想提升自己的技术水平,挑战难题不就是一个很好的提升技术水平的实战机会吗?如果完成了之前认为不可能完成的难题,这样就是一个技术水平提升的见证!不是吗?我也觉得,每天就写简单的业务代码,不探索新知识,不挑战难题,这样做开发也没多少意思!

    7.能用就行,不想优化

    这个也是一个很常见的情况,很多人认为写的代码能用就行,能实现需求就行!根本不管日后的优化。在开发项目或者开发插件上,虽然我也是提倡:先实现,再优化这个方式!但是并不代表我开发完了就完了,不会再想优化!如果不试着去优化自己的代码,不探索写代码的更好方式,以后别说编写高质量,简洁的代码了,因为自己把学习编写高质量,简洁的代码的一个重要途径给封锁了。还有一个就是,项目上,有些问题可能是潜在的,就是现在看着项目没出现什么问题,但并不代表以后不会出现问题。反而在项目开发完了之后,试着去优化自己的代码,探索更好的实现方式,试着编写出高质量,简洁的代码。这样难道不是一个很好的学习过程吗?至于优化代码的方式,很多很多(比如常说的:代码过于重复,是否引入设计模式?网站性能一般,可否进行优化?),优化这一块,也不是说一步就优化到最好的,而是至少不会比以前差!关于优化,我之前也发过一些资源。很容易找到,网上的资源更是很多!大家挑着看便是!

    8.不懂不问和不懂立刻问

    不懂不问,这个大家都知道,就是遇到问题,从不问同事或者通过其他方式咨询别人。就是自己在那里苦思冥想,尝试各种解决方案。这样的方式,最坏的结果就是最终还是解决不了问题,让同事来询问开发情况。最好的结果问题解决了,但是解决问题所花的时间会肯定很多。

    不懂立刻问,这个就是词面的意思。遇到问题马上问别人。自己没怎么思考或者根本不思考。这样能解决问题,但是这样会导致自己可能会频繁的问同事,会搞得同事很不耐烦。如果把同事的耐心磨没了,可能回答的语气可能不会很好。这样不仅影响同事之间的关系,还会让自己之后不敢再请教同事,有让自己处于上面所说的不懂不问的风险。

    个人建议:适时请教。遇到不懂的问题,先自己结合上下文思考下,想下以前有没有遇到这个问题,解决不了去网上找解决方案,如果还没有解决问题,这个时候再问别人,问同事或者通过其它渠道问别人。这样自己有了思考,解决问题的时候记忆也很深刻,也不会频繁的打扰同事!

    9.不懂装懂

    这个次面上跟上面的差不多,但实际上不一样!不懂装懂就是去问别人的时候,实际上别人的讲解并没有完全听懂,可能是碍于面子或者是因为不好意思打扰别人那么久,或者担心打扰别人太久,所以装作很懂。但是这样可能忽悠得了一时,很快又会露出马脚。这样会搞得隔一会又要去问别人同样的问题,这样反而会搞得别人更加尴尬,更加为难!自己也会打扰别人更多的时间!

    个人建议:如果有问题去问别人,只要你问的人不是一个非常没有耐心的人。他都会耐心的解答你的问题!所以,当问别人问题的时候,一定要确保自己是已经弄懂了问题的缘由,同事一遍没解释清楚,自己直接回答不明白,相信很多人都会再详细的解释一遍。如果担心同事工作忙或者其它原因,可以挑一个合适的时间!我现在问同事就是,要么不问,要问就切底弄懂!当然了,我的同事都很有耐心,每次我有什么问题,他们都会耐心解答,甚至是扩展开来讲!

    10.没理清楚需求就写代码

    很多人在接到需求之后,第一反应就是写代码,即使是在自己没把需求理清楚之前也是照样写代码。另一种情况就是,很多人是边写代码,边想需求。这个开发方式,万一自己对需求理解有误!可能会导致自己写的代码,很大一部分都要修改,甚至是全部删除重写。没理清楚需求就写代码这个情况,发生的概率应该挺大的,但是一般来说很难发现这个情况,毕竟程序员对代码的增删改查是再正常不过了!我本身也不知道,就是在一次的技术分享中,老大提出来的,他的建议就是对于一些稍微复杂一点的需求,先理清楚需求,简单画个流程图,然后在代码里面,先写上一点注释,再开始动手写代码!对于这一点,我现在就是在执行当中!除非需求真的很简单,否则我都会在草稿本上简单画一下流程图。比如下面这个,这个已经是我画的流程图里比较简单的一个了。根据流程图,写好注释,再写代码,这样会比较有条理,代码也清晰,日后的返工也可能会有,但是不会像以前那么多!在开发时间上,效率上,都得到了一个提升!

    小结

    所以说,真正学好前端还是需要注意很多的,web前端其实目前竞争也很大,让自己出类拔萃持续学习非常有必要心生大意。我们能做的,只有时刻学习,提升自己的技术水平。这样才能保证自己有很大的竞争力,能够从这么多人中脱颖而出。对于学习和提升自己,除了应该有适合自己的学习方式,也该对一些妨碍进步的学习方式引以为鉴!上面10点是我自己的一些想法,希望对大家有用。

web培训心得体会

所有视频需要登录后,才能观看

请先登录您的帐号,即可完整播放,如果您尚未注册帐号,请先点击注册。