介:1.使用 typeof bar==="object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱?尽管 typeof bar==="object" 是检查 bar 是否对象的可靠方法,令人惊讶的是在JavaScript中 null 也被认为是对 ...
思想观念的笔记本电脑
1.使用 typeof bar==="object" 来确定 bar 是否是对象的潜在陷阱是什么?如何避免这个陷阱?尽管 typeof bar==="object" 是检查 bar 是否对象的可靠方法,令人惊讶的是在JavaScript中 null 也被认为是对象!因此,令大多数开发人员惊讶的是,下面的代码将输出 true (而不是false) 到控制台:
var bar=null;
console.log(typeof bar==="object"); // logs true!
只要清楚这一点,同时检查 bar 是否为 null,就可以很容易地避免问题:
console.log((bar !==null) && (typeof bar==="object")); // logs false
要答全问题,还有其他两件事情值得注意:首先,上述解决方案将返回 false,当 bar 是一个函数的时候。在大多数情况下,这是期望行为,但当你也想对函数返回 true 的话,你可以修改上面的解决方案为:
console.log((bar !==null) && ((typeof bar==="object") || (typeof bar==="function")));
第二,上述解决方案将返回 true,当 bar 是一个数组(例如,当 var bar=[];)的时候。在大多数情况下,这是期望行为,因为数组是真正的对象,但当你也想对数组返回 false 时,你可以修改上面的解决方案为:
console.log((bar !==null) && (typeof bar==="object") && (toString.call(bar) !=="[object Array]"));
或者,如果你使用jQuery的话:
console.log((bar !==null) && (typeof bar==="object") && (! $.isArray(bar)));
2.下面的代码将输出什么到控制台,为什么?
(function(){
var a=b=3;
})();
console.log("a defined? " + (typeof a !=='undefined'));
console.log("b defined? " + (typeof b !=='undefined'));
由于 a 和 b 都定义在函数的封闭范围内,并且都始于 var关键字,大多数JavaScript开发人员期望 typeof a 和 typeof b 在上面的例子中都是undefined。然而,事实并非如此。这里的问题是,大多数开发人员将语句 var a=b=3; 错误地理解为是以下声明的简写:
var b=3;
var a=b;
但事实上,var a=b=3; 实际是以下声明的简写:
b=3;
var a=b;
因此(如果你不使用严格模式的话),该代码段的输出是:
a defined? false
b defined? true
但是, b 如何才能被定义在封闭函数的范围之外呢?是的,既然语句 var a=b=3; 是语句 b=3; 和 var a=b;的简写, b 最终成为了一个全局变量(因为它没有前缀 var 关键字),因此仍然在范围内甚至封闭函数之外。需要注意的是,在严格模式下(即使用 use strict),语句var a=b=3; 将生成ReferenceError: b is not defined的运行时错误,从而避免任何否则可能会导致的headfakes /bug。 (还是你为什么应该理所当然地在代码中使用 use strict 的最好例子!)3.下面的代码将输出什么到控制台,为什么?
var myObject={
foo: "bar",
func: function() {
var self=this;
console.log("outer func: this.foo=" + this.foo);
console.log("outer func: self.foo=" + self.foo);
(function() {
console.log("inner func: this.foo=" + this.foo);
console.log("inner func: self.foo=" + self.foo);
}());
}
};
myObject.func();
上面的代码将输出以下内容到控制台:
outer func: this.foo=bar
outer func: self.foo=bar
inner func: this.foo=undefined
inner func: self.foo=bar
在外部函数中, this 和self 两者都指向了 myObject,因此两者都可以正确地引用和访问 foo。在内部函数中, this 不再指向 myObject。其结果是,this.foo 没有在内部函数中被定义,相反,指向到本地的变量self 保持在范围内,并且可以访问。 (在ECMA 5之前,在内部函数中的this 将指向全局的 window 对象;反之,因为作为ECMA 5,内部函数中的功能this 是未定义的。)4.封装JavaScript源文件的全部内容到一个函数块有什么意义及理由?这是一个越来越普遍的做法,被许多流行的JavaScript库(jQuery,Node.js等)采用。这种技术创建了一个围绕文件全部内容的闭包,也许是最重要的是,创建了一个私有的命名空间,从而有助于避免不同JavaScript模块和库之间潜在的名称冲突。这种技术的另一个特点是,允许一个易于引用的(假设更短的)别名用于全局变量。这通常用于,例如,jQuery插件中。jQuery允许你使用jQuery.noConflict(),来禁用 $ 引用到jQuery命名空间。在完成这项工作之后,你的代码仍然可以使用$ 利用这种闭包技术,如下所示:
(function($) { /* jQuery plugin code referencing $ */ } )(jQuery);
5.在JavaScript源文件的开头包含 use strict 有什么意义和好处?对于这个问题,既简要又最重要的答案是,use strict 是一种在JavaScript代码运行时自动实行更严格解析和错误处理的方法。那些被忽略或默默失败了的代码错误,会产生错误或抛出异常。通常而言,这是一个很好的做法。严格模式的一些主要优点包括:
6.考虑以下两个函数。它们会返回相同的东西吗? 为什么相同或为什么不相同?
function foo1()
{
return {
bar: "hello"
};
}
function foo2()
{
return
{
bar: "hello"
};
}
出人意料的是,这两个函数返回的内容并不相同。更确切地说是:
console.log("foo1 returns:");
console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());
将产生:
foo1 returns:
Object {bar: "hello"}
foo2 returns:
undefined
这不仅是令人惊讶,而且特别让人困惑的是, foo2()返回undefined却没有任何错误抛出。原因与这样一个事实有关,即分号在JavaScript中是一个可选项(尽管省略它们通常是非常糟糕的形式)。其结果就是,当碰到 foo2()中包含 return语句的代码行(代码行上没有其他任何代码),分号会立即自动插入到返回语句之后。也不会抛出错误,因为代码的其余部分是完全有效的,即使它没有得到调用或做任何事情(相当于它就是是一个未使用的代码块,定义了等同于字符串 "hello"的属性 bar)。这种行为也支持放置左括号于JavaScript代码行的末尾,而不是新代码行开头的约定。正如这里所示,这不仅仅只是JavaScript中的一个风格偏好。7. NaN 是什么?它的类型是什么?你如何可靠地测试一个值是否等于 NaN ?NaN 属性代表一个“不是数字”的值。这个特殊的值是因为运算不能执行而导致的,不能执行的原因要么是因为其中的运算对象之一非数字(例如, "abc" / 4),要么是因为运算的结果非数字(例如,除数为零)。虽然这看上去很简单,但 NaN 有一些令人惊讶的特点,如果你不知道它们的话,可能会导致令人头痛的bug。首先,虽然 NaN 意味着“不是数字”,但是它的类型,不管你信不信,是 Number:
console.log(typeof NaN==="number"); // logs "true"
此外, NaN 和任何东西比较——甚至是它自己本身!——结果是false:
console.log(NaN===NaN); // logs "false"
一种半可靠的方法来测试一个数字是否等于 NaN,是使用内置函数 isNaN(),但即使使用 isNaN() 依然并非是一个完美的解决方案。一个更好的解决办法是使用 value !==value,如果值等于NaN,只会产生true。另外,ES6提供了一个新的 Number.isNaN() 函数,这是一个不同的函数,并且比老的全局 isNaN() 函数更可靠。8.下列代码将输出什么?并解释原因。
console.log(0.1 + 0.2);
console.log(0.1 + 0.2==0.3);
一个稍微有点编程基础的回答是:“你不能确定。可能会输出“0.3”和“true”,也可能不会。JavaScript中的数字和浮点精度的处理相同,因此,可能不会总是产生预期的结果。“以上所提供的例子就是一个演示了这个问题的典型例子。但出人意料的是,它会输出:
0.30000000000000004
false
9.讨论写函数 isInteger(x) 的可能方法,用于确定x是否是整数。这可能听起来是小菜一碟,但事实上,这很琐碎,因为ECMAScript 6引入了一个新的正以此为目的 Number.isInteger() 函数。然而,之前的ECMAScript 6,会更复杂一点,因为没有提供类似的 Number.isInteger() 方法。问题是,在ECMAScript规格说明中,整数只概念上存在:即,数字值总是存储为浮点值。考虑到这一点,最简单又最干净的ECMAScript6之前的解决方法(同时也非常稳健地返回 false ,即使一个非数字的值,如字符串或 null ,被传递给函数)如下:
function isInteger(x) { return (x^0)===x; }
下面的解决方法也是可行的,虽然不如上面那个方法优雅:
function isInteger(x) { return Math.round(x)===x; }
请注意 Math.ceil() 和 Math.floor() 在上面的实现中等同于 Math.round()。或:
function isInteger(x) { return (typeof x==='number') && (x % 1===0);
相当普遍的一个不正确的解决方案是:
function isInteger(x) { return parseInt(x, 10)===x; }
虽然这个以 parseInt函数为基础的方法在 x 取许多值时都能工作良好,但一旦 x 取值相当大的时候,就会无法正常工作。问题在于 parseInt() 在解析数字之前强制其第一个参数到字符串。因此,一旦数目变得足够大,它的字符串就会表达为指数形式(例如, 1e+21)。因此,parseInt() 函数就会去解析 1e+21,但当到达 e字符串的时候,就会停止解析,因此只会返回值 1。注意:
> String(1000000000000000000000)
'1e+21'
> parseInt(1000000000000000000000, 10)
1
> parseInt(1000000000000000000000, 10)===1000000000000000000000
false
10.下列代码行1-4如何排序,使之能够在执行代码时输出到控制台? 为什么?
(function() {
console.log(1);
setTimeout(function(){console.log(2)}, 1000);
setTimeout(function(){console.log(3)}, 0);
console.log(4);
})();
序号如下:
1
4
3
2
让我们先来解释比较明显而易见的那部分:
好的。但是,既然 3 是0毫秒延迟之后输出的,那么是否意味着它是立即输出的呢?如果是的话,那么它是不是应该在 4 之前输出,既然 4 是在第二行输出的?要回答这个问题,你需要正确理解JavaScript的事件和时间设置。浏览器有一个事件循环,会检查事件队列和处理未完成的事件。例如,如果时间发生在后台(例如,脚本的 onload 事件)时,浏览器正忙(例如,处理一个 onclick),那么事件会添加到队列中。当onclick处理程序完成后,检查队列,然后处理该事件(例如,执行 onload 脚本)。同样的, setTimeout() 也会把其引用的函数的执行放到事件队列中,如果浏览器正忙的话。当setTimeout()的第二个参数为0的时候,它的意思是“尽快”执行指定的函数。具体而言,函数的执行会放置在事件队列的下一个计时器开始。但是请注意,这不是立即执行:函数不会被执行除非下一个计时器开始。这就是为什么在上述的例子中,调用 console.log(4) 发生在调用 console.log(3) 之前(因为调用 console.log(3) 是通过setTimeout被调用的,因此会稍微延迟)。11.写一个简单的函数(少于80个字符),要求返回一个布尔值指明字符串是否为回文结构。下面这个函数在 str 是回文结构的时候返回true,否则,返回false。
function isPalindrome(str) {
str=str.replace(/\W/g, '').toLowerCase();
return (str==str.split('').reverse().join(''));
}
例如:
console.log(isPalindrome("level")); // logs 'true'
console.log(isPalindrome("levels")); // logs 'false'
console.log(isPalindrome("A car, a man, a maraca")); // logs 'true'
12.写一个 sum方法,在使用下面任一语法调用时,都可以正常工作。
console.log(sum(2,3)); // Outputs 5
console.log(sum(2)(3)); // Outputs 5
(至少)有两种方法可以做到:方法1
function sum(x) {
if (arguments.length==2) {
return arguments[0] + arguments[1];
} else {
return function(y) { return x + y; };
}
}
在JavaScript中,函数可以提供到 arguments 对象的访问,arguments 对象提供传递到函数的实际参数的访问。这使我们能够使用 length 属性来确定在运行时传递给函数的参数数量。如果传递两个参数,那么只需加在一起,并返回。否则,我们假设它被以 sum(2)(3)这样的形式调用,所以我们返回一个匿名函数,这个匿名函数合并了传递到 sum()的参数和传递给匿名函数的参数。方法2
function sum(x, y) {
if (y !==undefined) {
return x + y;
} else {
return function(y) { return x + y; };
}
}
当调用一个函数的时候,JavaScript不要求参数的数目匹配函数定义中的参数数量。如果传递的参数数量大于函数定义中参数数量,那么多余参数将简单地被忽略。另一方面,如果传递的参数数量小于函数定义中的参数数量,那么缺少的参数在函数中被引用时将会给一个 undefined值。所以,在上面的例子中,简单地检查第2个参数是否未定义,就可以相应地确定函数被调用以及进行的方式。13.请看下面的代码片段:
for (var i=0; i < 5; i++) {
var btn=document.createElement('button');
btn.appendChild(document.createTextNode('Button ' + i));
btn.addEventListener('click', function(){ console.log(i); });
document.body.appendChild(btn);
}
(a)当用户点击“Button 4”的时候会输出什么到控制台,为什么?(b)提供一个或多个备用的可按预期工作的实现方案。(a)无论用户点击什么按钮,数字5将总会输出到控制台。这是因为,当 onclick 方法被调用(对于任何按钮)的时候, for 循环已经结束,变量 i 已经获得了5的值。(面试者如果能够谈一谈有关如何执行上下文,可变对象,激活对象和内部“范围”属性贡有助于闭包行为,则可以加分)。(b)要让代码工作的关键是,通过传递到一个新创建的函数对象,在每次传递通过 for 循环时,捕捉到 i 值。下面是三种可能实现的方法:
for (var i=0; i < 5; i++) {
var btn=document.createElement('button');
btn.appendChild(document.createTextNode('Button ' + i));
btn.addEventListener('click', (function(i) {
return function() { console.log(i); };
})(i));
document.body.appendChild(btn);
}
或者,你可以封装全部调用到在新匿名函数中的 btn.addEventListener :
for (var i=0; i < 5; i++) {
var btn=document.createElement('button');
btn.appendChild(document.createTextNode('Button ' + i));
(function (i) {
btn.addEventListener('click', function() { console.log(i); });
})(i);
document.body.appendChild(btn);
}
也可以调用数组对象的本地 forEach 方法来替代 for 循环:
['a', 'b', 'c', 'd', 'e'].forEach(function (value, i) {
var btn=document.createElement('button');
btn.appendChild(document.createTextNode('Button ' + i));
btn.addEventListener('click', function() { console.log(i); });
document.body.appendChild(btn);
});
14.下面的代码将输出什么到控制台,为什么?
var arr1="john".split('');
var arr2=arr1.reverse();
var arr3="jones".split('');
arr2.push(arr3);
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));
输出结果是:
"array 1: length=5 last=j,o,n,e,s"
"array 2: length=5 last=j,o,n,e,s"
arr1 和 arr2 在上述代码执行之后,两者相同了,原因是:
这里有几个侧面点有时候会让你在回答这个问题时,阴沟里翻船:传递数组到另一个数组的 push() 方法会让整个数组作为单个元素映射到数组的末端。其结果是,语句 arr2.push(arr3); 在其整体中添加 arr3 作为一个单一的元素到 arr2 的末端(也就是说,它并没有连接两个数组,连接数组是 concat() 方法的目的)。和Python一样,JavaScript标榜数组方法调用中的负数下标,例如 slice() 可作为引用数组末尾元素的方法:例如,-1下标表示数组中的最后一个元素,等等。15.下面的代码将输出什么到控制台,为什么?
console.log(1 + "2" + "2");
console.log(1 + +"2" + "2");
console.log(1 + -"1" + "2");
console.log(+"1" + "1" + "2");
console.log( "A" - "B" + "2");
console.log( "A" - "B" + 2);
上面的代码将输出以下内容到控制台:
"122"
"32"
"02"
"112"
"NaN2"
NaN
原因是…这里的根本问题是,JavaScript(ECMAScript)是一种弱类型语言,它可对值进行自动类型转换,以适应正在执行的操作。让我们通过上面的例子来说明这是如何做到的。例1:1 + "2" + "2" 输出:"122" 说明: 1 + "2" 是执行的第一个操作。由于其中一个运算对象("2")是字符串,JavaScript会假设它需要执行字符串连接,因此,会将 1 的类型转换为 "1", 1 + "2"结果就是 "12"。然后, "12" + "2" 就是 "122"。例2: 1 + +"2" + "2" 输出: "32" 说明:根据运算的顺序,要执行的第一个运算是 +"2"(第一个 "2" 前面的额外 + 被视为一元运算符)。因此,JavaScript将 "2" 的类型转换为数字,然后应用一元 + 号(即,将其视为一个正数)。其结果是,接下来的运算就是 1 + 2 ,这当然是 3。然后我们需要在一个数字和一个字符串之间进行运算(即, 3 和 "2"),同样的,JavaScript会将数值类型转换为字符串,并执行字符串的连接,产生 "32"。例3: 1 + -"1" + "2" 输出: "02" 说明:这里的解释和前一个例子相同,除了此处的一元运算符是 - 而不是 +。先是 "1" 变为 1,然后当应用 - 时又变为了 -1 ,然后将其与 1相加,结果为 0,再将其转换为字符串,连接最后的 "2" 运算对象,得到 "02"。例4: +"1" + "1" + "2" 输出: "112" 说明:虽然第一个运算对象 "1"因为前缀的一元 + 运算符类型转换为数值,但又立即转换回字符串,当连接到第二个运算对象 "1" 的时候,然后又和最后的运算对象"2" 连接,产生了字符串 "112"。例5: "A" - "B" + "2" 输出: "NaN2" 说明:由于运算符 - 不能被应用于字符串,并且 "A" 和 "B" 都不能转换成数值,因此,"A" - "B"的结果是 NaN,然后再和字符串 "2" 连接,得到 "NaN2" 。例6: "A" - "B" + 2 输出: NaN 说明:参见前一个例子, "A" - "B" 结果为 NaN。但是,应用任何运算符到NaN与其他任何的数字运算对象,结果仍然是 NaN。16.下面的递归代码在数组列表偏大的情况下会导致堆栈溢出。在保留递归模式的基础上,你怎么解决这个问题?
var list=readHugeList();
var nextListItem=function() {
var item=list.pop();
if (item) {
// process the list item...
nextListItem();
}
};
潜在的堆栈溢出可以通过修改nextListItem 函数避免:
var list=readHugeList();
var nextListItem=function() {
var item=list.pop();
if (item) {
// process the list item...
setTimeout( nextListItem, 0);
}
};
堆栈溢出之所以会被消除,是因为事件循环操纵了递归,而不是调用堆栈。当 nextListItem 运行时,如果 item不为空,timeout函数(nextListItem)就会被推到事件队列,该函数退出,因此就清空调用堆栈。当事件队列运行其timeout事件,且进行到下一个 item 时,定时器被设置为再次调用 nextListItem。因此,该方法从头到尾都没有直接的递归调用,所以无论迭代次数的多少,调用堆栈保持清空的状态。17.JavaScript中的“闭包”是什么?请举一个例子。闭包是一个可以访问外部(封闭)函数作用域链中的变量的内部函数。闭包可以访问三种范围中的变量:这三个范围具体为:(1)自己范围内的变量,(2)封闭函数范围内的变量,以及(3)全局变量。下面是一个简单的例子:
var globalVar="xyz";
(function outerFunc(outerArg) {
var outerVar='a';
(function innerFunc(innerArg) {
var innerVar='b';
console.log(
"outerArg=" + outerArg + "\n" +
"innerArg=" + innerArg + "\n" +
"outerVar=" + outerVar + "\n" +
"innerVar=" + innerVar + "\n" +
"globalVar=" + globalVar);
})(456);
})(123);
在上面的例子中,来自于 innerFunc, outerFunc和全局命名空间的变量都在 innerFunc的范围内。因此,上面的代码将输出如下:
outerArg=123
innerArg=456
outerVar=a
innerVar=b
globalVar=xyz
18.下面的代码将输出什么:
for (var i=0; i < 5; i++) {
setTimeout(function() { console.log(i); }, i * 1000 );
}
解释你的答案。闭包在这里能起什么作用?上面的代码不会按预期显示值0,1,2,3,和4,而是会显示5,5,5,5,和5。原因是,在循环中执行的每个函数将整个循环完成之后被执行,因此,将会引用存储在 i中的最后一个值,那就是5。闭包可以通过为每次迭代创建一个唯一的范围,存储范围内变量的每个唯一的值,来防止这个问题,如下:
for (var i=0; i < 5; i++) {
(function(x) {
setTimeout(function() { console.log(x); }, x * 1000 );
})(i);
}
这就会按预期输出0,1,2,3,和4到控制台。19.以下代码行将输出什么到控制台?
console.log("0 || 1="+(0 || 1));
console.log("1 || 2="+(1 || 2));
console.log("0 && 1="+(0 && 1));
console.log("1 && 2="+(1 && 2));
并解释。该代码将输出:
0 || 1=1
1 || 2=1
0 && 1=0
1 && 2=2
在JavaScript中, || 和 &&都是逻辑运算符,用于在从左至右计算时,返回第一个可完全确定的“逻辑值”。或( || )运算符。在形如 X||Y的表达式中,首先计算X 并将其解释执行为一个布尔值。如果这个布尔值true,那么返回true(1),不再计算 Y,因为“或”的条件已经满足。如果这个布尔值为false,那么我们仍然不能知道 X||Y是真是假,直到我们计算 Y,并且也把它解释执行为一个布尔值。因此, 0 || 1 的计算结果为true(1),同理计算1 || 2。与( &&)运算符。在形如 X&&Y的表达式中,首先计算 X并将其解释执行为一个布尔值。如果这个布尔值为 false,那么返回 false(0),不再计算 Y,因为“与”的条件已经失败。如果这个布尔值为true,但是,我们仍然不知道 X&&Y 是真是假,直到我们去计算 Y,并且也把它解释执行为一个布尔值。不过,关于 &&运算符有趣的地方在于,当一个表达式计算为“true”的时候,那么就返回表达式本身。这很好,虽然它在逻辑表达式方面计算为“真”,但如果你希望的话也可用于返回该值。这就解释了为什么,有些令人奇怪的是, 1 && 2返回 2(而不是你以为的可能返回 true 或 1)。20.执行下面的代码时将输出什么?请解释。
console.log(false=='0')
console.log(false==='0')
代码将输出:
true
false
在JavaScript中,有两种等式运算符。三个等于运算符===的作用类似传统的等于运算符:如果两侧的表达式有着相同的类型和相同的值,那么计算结果为true。而双等于运算符,会只强制比较它们的值。因此,总体上而言,使用===而不是==的做法更好。 !==vs !=亦是同理
需要观看python? java? web 资料的:
老规矩:转发+关注,私信小编“资料”免费分享资料给你!
日,滨州医学院发布公告,现面向社会公开招聘100多名工作人员,学校已经通过山东省人力资源和社会保障厅网站(http://hrss.shandong.gov.cn/)和滨州医学院网站(http://www.bzmc.edu.cn/)面向社会发布招聘信息。
根据岗位信息,此次招聘只招聘硕士以上学位的人才。根据要求,应聘初级岗位人员年龄应在40周岁以下(1979年4月16日以后出生);应聘中级岗位人员年龄应在45周岁以下(1974年4月16日以后出生);应聘副高级岗位人员年龄应在50周岁以下(1969年4月16日以后出生);应聘正高级岗位人员年龄应在55周岁以下(1964年4月16日以后出生)。
应聘人员可登录学校人力资源处网站(http://rsc.bzmc.edu.cn/)点击浮窗(2020年省属事业单位公开招聘专栏)或直接登录网址(http://122.51.154.70:18080/)进行报名,按要求注册并如实填写、提交个人信息资料。每人限报一个岗位。报名人员在审核前可修改报名信息,后一次自动替换前一次信息。审核通过后,报名信息不能更改。本次招聘各类通知均通过报名系统或学校人力资源处网站(http://rsc.bzmc.edu.cn/)发布,不再进行电话通知,请考生自行关注查询,因个人原因未及时查看通知消息而影响考试,后果自负。应聘人员务必于报名截止日17:00前电话确认,确认电话同《省属事业单位公开招聘工作人员岗位汇总表》咨询电话。
在报名时间安排方面,初级岗位报名时间自信息发布之日起至2020年5月9日17:00止。面向高级专业技术人员和博士的岗位为长期招聘岗位,自简章发布之日起10个工作日后,学校根据岗位报名情况,不定期启动招聘程序(疫情期间实行网络招聘),岗位招满即止,未招满的岗位报名有效期至2020年11月30日。学校将于每月月初在学校人力资源处网站及报名系统通报岗位空余情况,供应聘人员参考。面试、考察、体检结果会在学校人力资源处网站及报名系统及时公布,接受社会监督。
(齐鲁晚报·齐鲁壹点记者 尹明亮)
找记者、求报道、求帮助,各大应用市场下载“齐鲁壹点”APP或搜索微信小程序“壹点情报站”,全省600多位主流媒体记者在线等你来报料! 我要报料
太原市晋源区2021年
公开招聘事业单位工作人员公告
根据中共山西省委组织部、山西省人力资源和社会保障厅《关于事业单位新进人员全面实行公开招聘的通知》(晋人社厅发〔2012〕53号)、《关于进一步改进和加强事业单位公开招聘工作的意见》(晋人社厅发〔2017〕35号)及《关于做好2021年全省事业单位公开招聘工作的通知》(晋人社厅发〔2021〕17号)文件的有关规定,结合我区实际,决定为晋源区公开招聘事业单位工作人员40名。现公告如下:
一、招聘原则
按照德才兼备的标准及“优化结构、合理配置、瞄准需求、科学设岗”要求,坚持“公开、平等、竞争、择优”的原则。
二、招聘岗位及名额
招聘事业单位工作人员40人,具体岗位条件及名额见《太原市晋源区2021年事业单位招聘岗位一览表》(以下简称《岗位一览表》)(附件1)。
三、招聘条件
(一)基本条件
1.具有中华人民共和国国籍,且年满18周岁;
2.遵守中华人民共和国宪法、法律和法规;
3.具有良好的品行;
4.身心健康,具有正常履行职责的身体条件;
5.具有岗位所需的年龄、专业知识、职业资格、工作能力,以及国家认可的学历;
6.具备报考岗位所要求的其他资格条件。
有下列情形之一的不得报考
1.现役军人,不能报考;
2.在读的非应届毕业生不能报考(非2021年应届毕业的在读全日制专升本人员、研究生人员不得以原取得的学历学位报考);
3.因犯罪受过刑事处罚的、被开除中国共产党党籍或公职的;有犯罪嫌疑尚未查清的、正在接受纪律审查的或未解除党纪、政务处分的人员,不能报考;
4.各级公务员招考和事业单位招聘中被认定有舞弊等严重违反考录、招聘纪律行为的人员,不能报考;
5.试用期内的公务员、参照公务员法管理的事业单位工作人员和试用期内的事业单位工作人员,不能报考;
6.招聘为事业单位工作人员有服务年限规定且服务期未满的,不能报考;
7.公务员、参照公务员法管理的事业单位工作人员和事业单位工作人员被辞退未满5年的,不能报考;
8.被依法列为失信联合惩戒对象以及法律、法规规定不符合本次公开招聘要求的人员,不能报考;
9.出现重大医疗事故或被吊销医师执照的人员,不能报考;
10.报考人员不能报考聘用后即构成回避关系的岗位;
11.在报名之后、聘用之前,应聘者已成为试用期内的公务员、参照公务员法管理的事业单位工作人员或已被聘用为事业单位工作人员的,不予聘用;
12.国家法律法规规定不得聘用的其他情形人员。
(二)资格条件
1.学历要求:符合所报考岗位的学历要求。
2.专业要求:所学专业必须符合报考岗位专业要求,应聘者报名表所填写的所学专业名称须与本人取得高校毕业证书上所标明的专业一致。岗位专业要求按具体专业名称设置的,报考人员毕业证所学专业须与岗位要求的专业名称一致。
各岗位具体专业要求以《岗位一览表》为准。专业参照教育部“普通高等学校本(专)科专业目录”和“中国研究生招生信息网”专业库设置。
3.年龄要求:要求35周岁及以下(即1985年12月30日及以后出生)。个别岗位可放宽到40周岁及以下(即1980年12月30日及以后出生)。
4.已就业人员报考时,须征得本单位同意(公务员、参照公务员法管理的事业单位工作人员和事业单位工作人员还需征得主管部门以及具有人事管理权限部门的同意);定向、委培毕业生,须征得定向、委培单位同意。
(三)高校应届毕业生岗位
“高校应届毕业生专门岗位”的招聘对象为:2021年全国普通高等院校应届毕业生(不含委培、定向生)。2019年、2020年国家统一招生的普通高校毕业生未落实工作单位,其户口、档案、组织关系仍保留在原毕业学校,或保留在各级毕业生就业主管部门(毕业生就业指导服务中心)、各级人才交流服务机构和各级公共就业服务机构的毕业生视同为2021年高校应届毕业生。
2019年1月1日至资格复审前取得国(境)外学位并完成教育部门学历学位认证且未落实工作单位的留学回国人员,可以报考应届毕业生岗位。参加服务基层项目前无工作经历,服务期满后未落实工作单位的人员,服务期满且考核合格后2年内,可以报考应届毕业生岗位。
(四)服务基层项目人员专门岗位
“服务基层项目人员专门岗位”的招聘对象为:服务期满且考核合格的山西省大学生村官(不含2018年以后录用的选调生)、农村义务教育阶段特设岗位教师、“三支一扶”人员、大学生志愿服务西部计划人员(含晋西北计划)、农业技术推广服务特设岗位五类人员。
在军队服役5年(含)以上的山西籍高校毕业生退役军人以及劳动合同期满,持有《政府购买基层公共服务岗位终止劳动合同证明书》和《山西省政府购买基层公共服务岗位人员考核合格证书》的省政府购买基层公共服务岗位人员,可按服务基层项目人员对待,报考“服务基层项目人员专门岗位”。
以上服务(服役)期满截止时间均为2021年12月。
(五)其它条件要求
其它条件以《岗位一览表》为准。
上述招聘条件审查贯穿招聘全过程,报考人员报名时提交的信息和提供的有关材料必须真实有效。凡发现报考者与拟聘用岗位所要求的资格条件不符、提供虚假材料的,即取消其考试、聘用资格。
四、聘用人员待遇
聘用人员纳入全区事业单位编制管理,享受相应事业单位人员待遇。
五、招聘程序
(一)发布招聘公告
招聘公告在晋源区人民政府网站
(http://www.jinyuan.gov.cn)予以发布。招聘公告发布后,其他相关事宜将在晋源区人民政府网站予以发布。
(二)报名及资格初审
本次招聘采取网上报名的方式进行。报名网址:http://47.93.192.66/sxjinyuan/info/index.html,网上报名按以下程序进行:
1.提交报名申请
报名时间:2022年1月17日9:00至1月21日17:00。
登陆
http://47.93.192.66/sxjinyuan/info/index.html,提交报名申请,填写《太原市晋源区2021年事业单位招聘人员报名登记表》并按要求上传近期蓝底免冠正面数码照片(jpg格式,30KB以下)。报考人员只能选择一个单位的一个岗位进行报名,所学专业必须符合所报岗位专业的要求,报名必须使用有效身份证,且与考试时使用的身份证一致。提交的报考信息应当真实、准确(其中报考人员报名登记表所填写的资格证、专业应当与报考人员本人取得资格证书上、高校毕业证书上所载明的内容一致)。凡因信息填报有误、不全导致未通过资格审查的,后果由报考人员自行负责。提供虚假或不实报名信息的,一经查实,即取消报考资格。对伪造、变造有关证件或材料骗取报考资格的,取消考试成绩,并按有关规定予以严肃处理。
2.资格初审和结果查询
资格初审时间:2022年1月17日9:00至1月23日17:00。
报考人员请在提交报考申请1个工作日后,登录原报名网站查询资格审查结果。通过资格初审的,不能再修改报名信息或报考其它岗位;1月21日17:00前尚未审查或未通过资格初审的,可以修改信息或改报其它岗位。1月21日17:00至1月23日17:00期间报考申请未通过资格初审的,不能再提交资格初审、修改报考信息或报考其它岗位。请报考人员认真填写信息,以免因填报信息不准影响资格初审结果。
资格审查贯穿招聘工作全过程,凡出现报考人员弄虚作假的,与招聘岗位不符的查实后立即取消考试资格或聘用资格。
本次招聘考试实际报名缴费人数与岗位拟招聘人数比例应达3:1,报名缴费人数不达该比例的招聘岗位,按规定的比例相应核减岗位,如减少到1名仍达不到3:1,则取消该岗位。如被核减或取消的岗位为服务基层项目人员专门岗位或部分高校应届毕业生专门岗位,调整的岗位数将合并到同岗位(非服务基层项目人员专门岗位或非高校应届毕业生专门岗位),并视同其他报考人员平等竞争,不再另行改报。
对于专业较偏、人员紧缺且报名人数少、确实难以形成竞争的特殊岗位,可根据报名情况由招聘工作领导小组批准后降低或取消比例进行招聘,但拟招聘人员考试总成绩须达到65分及以上。
报考人员报考岗位被取消的,可改报其他岗位。改报时间为2022年1月26日9:00至1月26日17:00。改报岗位资格审查时间:2022年1月26日9:00至1月27日12:00。资格审查结果可于2022年1月27日18:00前查询。报考人员报考岗位被取消,未改报其他岗位或改报其他岗位未通过资格初审的,报名费将通过原报名渠道如数退还。
3.缴纳考试费用
通过资格初审的报考人员按网上提示的缴费办法进行网上缴费。缴费截止到2022年1月24日17:00。根据山西省发展和改革委员会、山西省财政厅《关于重新核发人力资源和社会保障部门行政事业性收费标准及有关问题的通知》(晋发改价格发〔2016〕467号)规定,本次考试收取考试费50元。未按期缴纳考试费用的,视为自动放弃考试。
建档立卡贫困家庭人员、城市低保人员和农村低保人员可享受减免考试费政策。建档立卡贫困家庭人员提供贫困家庭基本情况档案卡和乡村振兴部门出具的证明;城市低保人员和农村低保人员提供低保证和所在地的县级民政部门出具的证明,于2022年1月26日17:00前,前往晋源区人社局人事工资股(太原市晋源区景福北路8号2层240室)办理减免考务费用的手续。
4.打印准考证
通过资格初审并按规定缴纳费用的报考人员,可登陆原报名网站自行下载打印准考证,打印时间另行通知,请报考者密切关注晋源区人民政府网发布的通知。报考人员须认真阅读准考证相关内容及注意事项,提前做好考试准备。
报考人员请妥善保管好自己的准考证,参加笔试、资格复审和面试等各个环节均需携带准考证和有效身份证。
(三)笔试
1.笔试时间、地点:
报考人员按照准考证上确定的时间、地点参加笔试。参加笔试时,报考人员须同时携带准考证和有效身份证。
2.笔试内容:
其他岗位笔试内容为公共基础知识,包括政治理论、法律法规、时事政治、公文写作、科技人文知识等。
卫生系统岗位笔试内容包括政策理论、法律法规、卫生职业道德、突发公共卫生事件应急条例、中华人民共和国传染病防治法、公共防疫等相关知识。
3.笔试形式:笔试采取闭卷形式,总分100分,时间120分钟。
4.成绩查询:
笔试阅卷结束后,笔试成绩可在原报名网站查询或在晋源区人民政府网予以公布。
(四)资格复审
1.资格复审人选的确定
各岗位根据笔试成绩从高分到低分的顺序,按3﹕1的比例确定进入资格复审人选,人数未达3﹕1的按实有人数确定。如进入资格复审最后一名笔试成绩并列,并列人员全部进入资格复审。
2.资格复审
进入资格复审人员名单和资格复审时间、地点将在晋源区人民政府网站公布。
资格复审时,报考人员须提供以下材料:
(1)本人有效居民身份证。
(2)笔试准考证。
(3)境内高校毕业生提供毕业证及有效期内的《教育部学历证书电子注册备案表》;留学回国人员应提供教育部中国留学服务中心出具的《国(境)外学历学位认证书》;岗位有学位要求的,需提供报名所用学历对应的学位证及教育部学位与研究生教育发展中心出具的《认证报告》;报考应届毕业生岗位的,还需要提供与报名所用学历对应的《就业报到证》或《就业协议书》;报考岗位要求的资格证书(已通过考试但资格证书还未下发的,可提供资格考核合格成绩单或考试组织部门的证明)等相关证件(证明)。
(4)已就业报考人员需出具单位同意报考证明(公务员、参照公务员法管理的事业单位工作人员和事业单位工作人员还需出具主管部门以及具有人事管理权限部门的同意报考意见)。
(5)未就业且档案在各级公共就业和人才交流服务中心、就业服务机构代理的报考人员,须提供档案托管部门证明。
(6)报考服务基层项目专门岗位人员,除携带上述材料外,还须下载打印《服务基层项目人员审核表》(附件2),按照要求填写并加盖公章确认。
大学生村官由市、县两级组织部门审核盖章;农村义务教育阶段特设岗位教师由省教育厅盖章;2010年以前的“三支一扶”项目人员由团省委盖章,2010年(含)以后已领取《高校毕业生“三支一扶”服务证书》的直接携带证书参加资格复审,未领取《高校毕业生“三支一扶”服务证书》的,由省人社厅盖章;“西部计划”“晋西北计划”项目人员由团省委盖章;参加“农业技术推广服务特设岗位”计划项目人员由市县两级农业部门审核盖章。
在军队服役5年(含)以上的山西籍高校毕业生退役军人报考服务基层项目人员专门岗位的,除携带上述材料外,还须提供户口簿(印有本人户口信息的户口簿页和户主主页)、退伍证和当地退役军人事务部门出具的相关证明;省政府购买基层公共服务岗位人员须提供《政府购买基层公共服务岗位终止劳动合同证明书》和《山西省政府购买基层公共服务岗位人员考核合格证书》。
服务基层项目人员报考“应届毕业生岗位”的,还需承诺在参加服务基层项目前无工作经历。
(7)岗位有“中共党员(含预备党员)”要求的,需提供所在党支部或上级党组织出具的党组织关系证明,并注明入党时间。
(8)岗位有职业资格、研究方向、工作经历等其他要求的,需提供相关证件(证明)。
以上材料须提供原件及复印件,属于证件类的验原件留复印件,属于证明类的留原件。
资格复审时,发现应试者材料信息不实的,将取消其参加面试的资格。逾期不到的,视为自动放弃面试资格。若资格复审过程中有人放弃或未通过,按笔试成绩从高分到低分顺次递补,如递补人员成绩并列,则全部参加资格复审;如参加笔试的报考人员中已无递补对象,则按资格复审合格的实有人员进入面试。资格复审结束后,按资格复审合格的实际人数确定参加面试人选。参加资格复审人员因个人原因放弃面试资格,应尽早提出放弃面试申明,确认参加资格复审人员需填写诚信承诺书,无故放弃面试将按有关规定被记入诚信档案。
证件(证明)不全或所提供的证件(证明)与报考岗位要求的资格条件不符以及主要信息不实的,资格复审不合格,后果由报考人员承担,涉及违纪的按有关违纪处理规定予以查处。
(五)面试
1.面试时间地点:
进入面试人员名单和面试时间、地点以晋源区人民政府网站公告的信息为准。
2.面试方式:
面试采取结构化面试的方式,考查报考人员的(综合分析能力、言语表达能力、应急应变能力、基层服务意识及能力、自我情绪控制能力和举止仪表等)。面试采取百分制,成绩60分为合格(含60分),不合格者不予聘用,若招聘岗位参加面试人员不能形成竞争的,报考人员面试成绩必须达到70分及以上,否则不予聘用。
3.体检人员的确定
面试结束后,按考试总成绩(考试总成绩=笔试成绩×60%+面试成绩×40%)从高到低的顺序,按招聘岗位计划聘用人数等额确定参加体检人选。如考试总成绩相同则按笔试成绩从高到低的顺序确定参加体检人选,如笔试成绩也相同则加一场面试,按面试加试成绩从高到低的顺序确定参加体检人选。
面试成绩、考试总成绩、体检名单将在晋源区人民政府网站予以公示。
(六)体检
体检标准参照《关于修订〈公务员录用体检通用标准(试行)>》,体检具体事宜另行通知,体检费用由报考人员承担。因不按规定的时间、地点参加体检的人员,视作自动放弃体检,取消其进入考察对象资格,所空缺的岗位按综合成绩顺次递补。进入体检人员对体检结果有异议的,可在接到体检结论通知起3个工作日内书面提出复检申请,招聘领导组在收到复检申请的10个工作日内组织复检,复检只进行一次,体检结果以复检结论为准。体检合格者确定为考察对象,体检不合格所空缺的岗位按综合成绩顺次递补。
(七)考察
考察内容主要包括应聘者的政治思想、道德品质、遵纪守法、诚实守信、自律意识、能力素质、工作态度、学习及工作表现以及需要回避的情况等,并对报考者提供的学历、资格等信息进行再次复核。不按规定参加考察或考察不合格者取消其拟聘用资格,所空缺的岗位不再递补。
(八)公示
根据考试、体检、考察结果,确定拟聘用人员,拟聘用人员名单在晋源区人民政府网站予以公示,公示期为7个工作日。广泛接受社会群众的监督,对反映有影响聘用的问题并查实的,取消其拟聘用资格,不再递补。
(九)审批聘用
1.拟聘用人员公示期满无异议,经领导组审核并报区委、区政府同意后,由区委组织部和区人社局按规定办理聘用手续。
2.聘用人员在晋源区的最低服务期限为五年,与用人单位签订聘用合同,试用期为一年,试用期包含在服务期内。服务期内不得调离本区,不得办理辞职等手续(用人单位解除聘用合同的情况除外)。
3.试用期满考核合格的予以办理转正手续,考核不合格的,用人单位与其解除聘用合同,不再递补。
4.聘用人员在试用期内发现患有癫痫、精神病等体检中不易查出的疾病及其他不能胜任本职工作的疾病,予以解聘,不再递补。
六、咨询与监督
报名咨询:其 他 岗 位:0351--6592372
卫生系统岗位:0351--6592802
监督举报电话:0351--6812380
(仅限工作时间)
七、防疫要求
为做好疫情防控常态化下的公开招聘考试工作,保证考务安全,考务人员及报考人员须按照省、市、区新冠肺炎疫情防控要求,做好参加招聘的防疫工作。
八、招聘纪律
(一)严格执行事业单位公开招聘有关政策规定,切实做到公开、公平、公正。
(二)严格执行事业单位公开招聘工作程序,严肃工作纪律,严守工作秘密,严格实行回避制度。
(三)应聘人员以不正当手段(如伪造、涂改证件、证明等)获取应聘资格或在笔试、面试、体检、考察过程中出现作弊等违纪违规行为,一经发现,立即取消资格。
特别提示
(一)在招聘过程中,所有公示信息、通知、公告等全部通过晋源区人民政府网站公布,不再另行电话通知,请报考人员及时关注网站信息。如报考人员因自身原因未能及时获取招聘信息或从其他渠道获取错误信息而延误、影响招聘的,其后果由报考人员自行负担。
(二)本次公开招聘考试不指定考试辅导用书,不举办也不委托任何机构或个人举办考试辅导培训班。凡社会上举办的各类事业单位招聘培训辅导班和发行的出版物等,均与本次公开招聘无关。敬请广大报考人员提高警惕,切勿上当受骗。
本公告由晋源区2021年事业单位公开招聘工作领导组办公室负责解释。
附件1太原市晋源区2021年事业单位招聘岗位一览表.xlsx
附件2晋源区2021年公开招聘事业单位工作人员服务基层项目人员审核表.xls
晋源区2021年事业单位
公开招聘工作领导组
2021年12月30日
监制|上官小鹏 赵红
编辑|李文涵
来源|山西省人社厅
*请认真填写需求信息,我们会在24小时内与您取得联系。